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