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

时间:2009-05-13 16:18:22

标签: python warnings io

假设我有类似文件的对象,比如StreamIO,并希望python的警告模块向其写入所有警告消息。我该怎么做?

3 个答案:

答案 0 :(得分:13)

尝试重新分配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。

答案 1 :(得分: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中的内容应该有助于让您走上正确的轨道。

答案 2 :(得分:0)

import sys
import StringIO

sys.stdout = StringIO.StringIO()