Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to tell a python script to stop at some point and give you the hand interactively, for example with ipython?

Tags:

python

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?

like image 804
static_rtti Avatar asked Jan 08 '10 08:01

static_rtti


2 Answers

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.

like image 157
Noufal Ibrahim Avatar answered Nov 02 '22 05:11

Noufal Ibrahim


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.

like image 35
Daniel Roseman Avatar answered Nov 02 '22 05:11

Daniel Roseman