python:从程序运行交互式python shell

时间:2011-10-06 16:15:39

标签: python debugging

我经常会遇到这样的情况:我将编写一个脚本,而且我要编写脚本的一部分,我想以交互方式使用一些变量。到达那个部分需要运行我已经写过的大部分脚本。

在这种情况下,从shell内部运行此程序并非易事。我不得不以某种方式重新创建该函数的条件。

我想要做的是调用一个函数,比如runshell(),它将在程序中的那一点运行python shell,将所有变量保持在范围内,允许我在其中查找。

我将如何做到这一点?

5 个答案:

答案 0 :(得分:47)

import code

code.interact(local=locals())

但是使用Python调试器可能更符合您的要求:

import pdb

pdb.set_trace()

答案 1 :(得分:17)

到目前为止,我找到的最方便的方法是:

import IPython
IPython.embed()

您将获得所有全局和局部变量以及IPython的所有生物舒适:标签完成,自动缩进等。

您必须安装IPython模块才能使用它:

pip install ipython

答案 2 :(得分:6)

为了实用,我想补充一点,你可以将调试器跟踪放在一个单元中:

import pdb; pdb.set_trace()

这是一个很好的行,可以添加到支持片段的编辑器,如TextMate或Vim + SnipMate。我把它设置为将“break”扩展到上面的一个衬里。

答案 3 :(得分:5)

您可以使用python调试器(pdbset_trace函数。

例如,如果您调用这样的脚本:

def whatever():
    x = 3
    import pdb
    pdb.set_trace()

if __name__ == '__main__':
    whatever()

在调用set_trace时获得范围:

$ python ~/test/test.py
--Return--
> /home/jterrace/test/test.py(52)whatever()->None
-> pdb.set_trace()
(Pdb) x
3
(Pdb) 

答案 4 :(得分:0)

不完全是一个完美的来源,但我之前写了一些沙井,这是我为一个废弃的宠物项目写的http://code.google.com/p/devdave/source/browse/pymethius/trunk/webmud/handlers/konsole.py

这是来自Twisted Library http://twistedmatrix.com/trac/browser/tags/releases/twisted-8.1.0/twisted/manhole/telnet.py的一个,控制台逻辑在Shell.doCommand中