如何将Python警告重定向到自定义流?

11 投票
3 回答
7256 浏览
提问于 2025-04-15 11:34

假设我有一个像 StreamIO 这样的文件对象,我想让 Python 的警告模块把所有的警告信息都写到这个对象里。我该怎么做呢?

3 个回答

0
import sys
import StringIO

sys.stdout = StringIO.StringIO()

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

0

我觉得像这样的代码应该可以工作,虽然这段代码还没有经过测试,而且这个界面看起来有更简单的方法,但我现在想不起来了:

import warnings

# defaults to the 'myStringIO' file
def my_warning_wrapper(message, category, filename, lineno, file=myStringIO, line=None):
    warnings.show_warning(message, category, filename, lineno, file, line)    

warnings._show_warning = my_warning_wrapper

如果这还不够,看看 Lib\warnings.py 里的内容应该能帮你找到正确的方向。

21

试着重新设置一下 warnings.showwarning,也就是说:

#!/sw/bin/python2.5

import warnings, sys

def customwarn(message, category, filename, lineno, file=None, line=None):
    sys.stdout.write(warnings.formatwarning(message, category, filename, lineno))

warnings.showwarning = customwarn
warnings.warn("test warning")

这样做会把所有的警告信息输出到标准输出(stdout)上。

撰写回答