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?
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.
Easiest way is to use the built-in debugger. At the point you want execution to stop, just do:
import pdb; pdb.set_trace()
and you'll be dumped into the pdb shell, which allows you to inspect variables and change them.
There is also an external ipdb package which you can get via easy_install which should work the same way.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With