可以让Python脚本在某个时刻暂停并与之交互吗,比如使用IPython?
假设我有一个脚本,它做了很多事情,但在快结束的时候有些地方出问题了。我希望能在出问题的地方加一个 start_ipython()
的函数,这样可以在这个地方暂停脚本,让我用ipython来检查变量等等。我该怎么做呢?
2 个回答
7
最简单的方法就是使用内置的调试工具。在你想要程序暂停的地方,只需要这样做:
import pdb; pdb.set_trace()
这样你就会进入一个叫做pdb的命令行界面,在这里你可以查看变量的值,还可以修改它们。
另外,还有一个外部的ipdb
包,你可以通过easy_install
来安装,它的功能和这个一样。
15
请注意,这在 IPython-0.11 版本中有所变化。现在不需要使用下面描述的方式,只需使用以下导入方式:
from IPython import embed as shell
下面的答案适用于 0.11 之前的 IPython 版本。
在你想要进入 IPython 的地方,定义这个:
def start_ipython():
from IPython.Shell import IPShellEmbed
shell = IPShellEmbed()
shell()
然后在你想进入解释器的地方调用 start_ipython
。
这样你就会进入一个解释器,并且会保留当时的 locals()
。
如果你想要一个普通的命令行,做这个:
def start_python():
import code
code.interact()
查看上述函数的文档以获取详细信息。我建议你先尝试 IPython 的方法,如果出现 ImportError
错误,就切换到普通模式,这样即使没有安装 IPython 也能正常工作。