Python 使用pdb调试到子流程中?

Python 使用pdb调试到子流程中?,python,debugging,subprocess,pdb,Python,Debugging,Subprocess,Pdb,我有一些python代码,其中包含许多对子流程的调用(例如subprocess.check_call())。它显然无法调试到子流程中 是否有任何方法(例如添加代码)使其达到此目的,或者我必须使用其他调试器?如果您有pdb,则必须单步执行代码。如果您有源文件,请在感兴趣的行中留下一个断点,并使用pdb自动在感兴趣的行停止 这就是我们在.net中所做的。希望它也适用于python。事实证明,障碍在于代码调用子进程也重定向了stdout: subprocess.call(["called_progra

我有一些python代码,其中包含许多对子流程的调用(例如subprocess.check_call())。它显然无法调试到子流程中


是否有任何方法(例如添加代码)使其达到此目的,或者我必须使用其他调试器?

如果您有pdb,则必须单步执行代码。如果您有源文件,请在感兴趣的行中留下一个断点,并使用pdb自动在感兴趣的行停止


这就是我们在.net中所做的。希望它也适用于python。

事实证明,障碍在于代码调用子进程也重定向了stdout:

subprocess.call(["called_program",
     "-q", num_processes,
     "-k", yaml_key],
    stdout=logfile,
    stderr=subprocess.STDOUT)

根据tdelaney的评论,我删除了重定向,并在
中放置了一个名为_program.py的断点。现在我可以在那个模块中使用pdb了。

那将是
pdb.set_trace()
,但它只有在OP没有重定向stdout时才会起作用。@tdelaney:你说得对。我所要做的就是停止重定向stdout。谢谢被调用的进程是用python编写的吗?是否重定向stdout/stderr?打印命令行并通过一个调试器运行怎么样?是的,是的。我做了您暗示的更改,现在我可以调试调用的例程;见下面我的答案。