如何在重新分配的sys.stdout中使用Python pdb.set_trace()?

时间:2014-11-18 07:41:32

标签: python pdb

我想通过命令过滤Python脚本的输出,同时能够正常使用pdb.set_trace()

我运行这个脚本:

#!/usr/bin/python

import sys, os, pdb

print "first line"
sys.stdout = os.popen('./filter', 'w')
#pdb.set_trace()
print "second line"
print "third line"  

并且filter脚本是这样的:

#!/usr/bin/python

import subprocess, sys

subprocess.call( 'cat', stdout=sys.stdout, stderr=sys.stderr, shell=True )

一切正常,我看到终端上的输出。但是,当我取消注释set_trace行时,现在,调试器显然已断开并且我可以使用命令,但是我没有看到它们的输出(直到整个程序存在),因此交互式调试被打破。 / p>

如何更改filter以便交互式调试有效?

1 个答案:

答案 0 :(得分:4)

您可以尝试制作自己的Pdb实例。例如

mypdb = pdb.Pdb(stdout=sys.__stdout__)