交互式调试另一个程序的python代码

时间:2016-12-24 23:37:27

标签: python python-3.x debugging subprocess pdb

我正在编写一个支持调试的python编辑器。我必须像IDE一样从我的应用程序调试交互式 python代码,但没有很多选项。

我知道bdb和pdb,但我必须将此脚本保存到文件中并发送命令,如跳过,继续,退出等。

我正在尝试使用subprocess lib和pdb,但我没有取得好成绩。

-Wall

如何使这在python 3.x中有效?我只需要一条路径,但最好只使用没有外部依赖的python 3。

P.S。我正在使用PyQt5。

1 个答案:

答案 0 :(得分:0)

来自communicate上的子流程文档:

  

Popen.communicate(输入=无)

     

与流程交互:将数据发送到stdin。从stdout和stderr读取数据,直到达到文件结尾。等待进程终止。可选的输入参数应该是要发送到子进程的字符串,如果没有数据应该发送给子进程,则为None。

因此,当调用communicate时,它将等待进程终止。它不能再次调用,因为该过程已经终止。

您可能应该直接从stdoutstderr直接阅读。这必须在不同的线程中完成,或者您必须偶尔轮询一次以查看数据是否可用。每个命令可能需要一段未知的时间才能由pdb执行,因此您不知道输出何时准备就绪。您可以通过写入流程stdin来发送命令。

您可能还想查看pexpect模块here。但是它还没有很好的Windows支持。