发现stdout输出的来源

时间:2014-11-12 23:28:25

标签: python-3.x ipython

我正在使用第三方库,将\n打印几百次到stdout - 这似乎是他们日志记录中的一个错误。

发现生成此输出的代码行的最佳方法是什么(我希望它是python而不是外部库)?

一些想法:

  • 如何将\n字符的显示更改为可识别的内容,如A,这样如果我使用调试器,我可以看到输出何时发生?

  • 每次将字符发送到std-out时,是否可以对低级函数进行猴子修补以导致某些输出或调试中断?

1 个答案:

答案 0 :(得分:1)

你可以尝试超越标准输出:

class StdoutFilter:
    def __init__(self, realStdout):
        self.realStdout = realStdout

    def write(self, text):
        if text == '\n':   # or some more complicated condition
            raise Exception("Newline alert!")

        self.realStdout.write(text)            

import sys
sys.stdout = StdoutFilter(sys.stdout)

# import the 3rd party library and use it

在此过滤器类中,只有在打印了超过 N 后续换行符后,才能添加计数器并引发异常。异常的堆栈跟踪将揭示恶意打印的来源。

或者您可以在那里设置断点,或将\n更改为其他内容。