我正在使用第三方库,该库将 \n
打印到 stdout
数百次 - 这似乎是他们日志记录中的错误。
发现生成此输出的代码行的最佳方法是什么(我希望它是 python 而不是外部库)?
一些想法:
如何将
\n
字符的显示更改为可识别的内容,例如A
,以便在使用调试器逐步执行时,我可以看到何时输出发生了吗?每次将字符发送到 std-out 时,我是否可以通过 monkey-patch 低级函数来产生一些输出或调试中断?
最佳答案
你可以尝试超越标准输出:
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
更改为其他内容。
关于python-3.x - 发现 stdout 输出的来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26898636/