Is it possible to tell a python script to stop at some point and give you the hand interactively, for example with ipython?
python
Solution
Note that this has changed in IPython-0.11. Instead of what is described below, simply use the following import:
from IPython import embed as shell
The answer below works for IPython versions prior to 0.11.
In the region where you want to drop into ipython, define this
def start_ipython():
from IPython.Shell import IPShellEmbed
shell = IPShellEmbed()
shell()
and call `start_ipython` where you want to drop into the interpreter.
This will drop you into an interpreter and will preserve the `locals()` at that point.
If you want a regular shell, do this
def start_python():
import code
code.interact()
Check the documentation for the above functions for details. I'd recommend that you try the ipython one and if it throws an `ImportError`, switch to normal so that it will work even if ipython is not installed.
Problem
Suppose I have a script that does a lot of stuff, and doesn't work well somewhere near the end. I'd love to be able to add a `start_ipython()` function at that point, which would stop the script at this point, and let me inspect variables and so on with ipython. How can I do this?