开发者

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

开发者 https://www.devze.com 2022-12-15 23:36 出处:网络
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

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消