如何找到虚假的打印声明?

xor*_*yst 5 python python-2.7

我正在调试一个大的Python代码库.在某个地方,一段代码正在打印到控制台,可能这是一些旧的调试代码,它是偶然留下的.

由于这是唯一没有通过记录器的控制台输出,有什么办法可以找到罪魁祸首吗?也许通过重新定义print语句的作用,我可以引发异常?

Bar*_*ski 5

尝试重定向sys.stdout到自定义流处理程序(请参阅将stdout重定向到Python中的文件?),您可以在其中覆盖write()方法.

尝试这样的事情:

import io
import sys
import traceback


class TestableIO(io.BytesIO):

    def __init__(self, old_stream, initial_bytes=None):
        super(TestableIO, self).__init__(initial_bytes)
        self.old_stream = old_stream

    def write(self, bytes):
        if 'bb' in bytes:
            traceback.print_stack(file=self.old_stream)
        self.old_stream.write(bytes)


sys.stdout = TestableIO(sys.stdout)
sys.stderr = TestableIO(sys.stderr)

print('aa')
print('bb')
print('cc')
Run Code Online (Sandbox Code Playgroud)

然后你会得到很好的追溯:

? python test.py
aa
  File "test.py", line 22, in <module>
    print('bb')
  File "test.py", line 14, in write
    traceback.print_stack(file=self.old_stream)
bb
cc
Run Code Online (Sandbox Code Playgroud)