有没有办法发现打印调用将使用哪个流?
当我使用 -bv (在Windows中)运行我的单元测试时,打印语句不再打印。但是,我的日志记录模块输出仍然打印到控制台。
我的日志设置基本上是:
ch = logging.StreamHandler(stream=sys.stdout)
ch.set_name('stdout')
addHandler(ch, logging.DEBUG, logger_=logger)
所以在我看来,sys.stdout与unittest重定向后的print语句不同。
答案 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
。