如何在程序中启动python控制台(以便于调试)?

时间:2010-12-22 17:18:53

标签: python console debugging interpreter

经过Matlab多年的研究编程,我想念我可以在执行中暂停程序并检查变量,通过交互式控制台绘制,保存/修改数据等,然后继续执行。

有没有办法在python中做同样的事情?

例如:


   # ... python code ...
   RunInterpreter
   # Interactive console is displayed, so user can inspect local/global variables
   # User types CTRL-D to exit, and script then continues to run
   # ... more python code ...

这会使调试变得更容易。建议非常感谢,谢谢!

6 个答案:

答案 0 :(得分:6)

使用pdb库。

我在Vim中将此行绑定到<F8>

import pdb; pdb.set_trace()

这会让你进入pdb控制台。

pdb控制台完全与标准Python控制台相同......但它会完成大部分相同的操作。另外,在我的~/.pdbrc中,我得到了:

alias i from IPython.Shell import IPShellEmbed as IPSh; IPSh(argv='')()

这样我就可以使用pdb命令从i进入一个“真正的”iPython shell:

(pdb) i
...
In [1]:

答案 1 :(得分:4)

我发现的优秀解决方案是使用'code'模块。我现在可以从代码中的任何地方调用'DebugKeyboard()',并弹出解释器提示,允许我检查变量并运行代码。 CTRL-D将继续该计划。

import code
import sys    

def DebugKeyboard(banner="Debugger started (CTRL-D to quit)"):

    # use exception trick to pick up the current frame
    try:
        raise None
    except:
        frame = sys.exc_info()[2].tb_frame.f_back

    # evaluate commands in current namespace
    namespace = frame.f_globals.copy()
    namespace.update(frame.f_locals)

    print "START DEBUG"
    code.interact(banner=banner, local=namespace)
    print "END DEBUG"

答案 2 :(得分:3)

code模块包含用于启动REPL的类。

答案 3 :(得分:2)

查看Python debugger。简而言之,您可以插入

import pdb; pdb.set_trace()

在程序中要调试的任何位置。 (请注意,您应该在发行版中删除这些!)

答案 4 :(得分:1)

pdb正是您所需要的 - 只需拨打pdb.set_trace(),即可将其放入调试器中。

答案 5 :(得分:-1)

这是一个更好,更简单的解决方案,可在Python 3.8中使用 https://stackoverflow.com/a/1396386/4566456

如果安装了IPython,功能甚至更强大 https://stackoverflow.com/a/8152484/4566456