python-3.x - 发现 stdout 输出的来源

标签 python-3.x ipython

我正在使用第三方库,该库将 \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/

相关文章:

ipython - 无法打开 IJulia;它改为启动 IPython

python - 将 ipython 笔记本转换为 mediawiki

python - 如何在 x 值的大小而不是计数之后排列 pandas barplot 中的条形

python - 是否可以在 TensorFlow 上加载学习模型 (.t7)?

python - py2exe - fatal error : Could not locate script

iPython nbconvert和 latex : use . eps代替.png进行绘图

python - python 脚本可以访问交互式 session 中定义的变量吗?

python - 在 Python 程序中启动 IPython,连接 IPython Notebook

python selenium 无法清除输入字段

Python 从动态文件名导入