发现在python中使用哪个流打印

时间:2014-07-15 23:02:45

标签: python windows logging printing python-unittest

有没有办法发现打印调用将使用哪个流?

当我使用 -bv (在Windows中)运行我的单元测试时,打印语句不再打印。但是,我的日志记录模块输出仍然打印到控制台。

我的日志设置基本上是:

    ch = logging.StreamHandler(stream=sys.stdout)
    ch.set_name('stdout')
    addHandler(ch, logging.DEBUG, logger_=logger)

所以在我看来,sys.stdout与unittest重定向后的print语句不同。

2 个答案:

答案 0 :(得分:0)

您可以执行此操作以强制将print语句打印到sys.stdout:

from __future__ import print_function
import sys

print("hello", file=sys.stdout)

答案 1 :(得分:0)

问题是,在日志记录为sys.stdout创建处理程序后,unittest会将StringIO重定向到sys.stdout 。在此之前,sys.stdout等于sys.__stdout__

问题是日志记录模块永远不会将其句柄更新为sys.stdout。它很高兴继续打印到原始的sys.stdout流参考。解决方案是检测sys.stdout是否仍然等于sys.__stdout__。如果它没有,那么它已被重定向,您必须通过删除该处理程序并再次添加它来刷新StreamHandler的sys.stdout