[英]Discover which stream print is using in python
有什么方法可以發現打印呼叫將使用哪個流?
當我使用-bv (在Windows中)運行單元測試時,打印語句不再打印。 但是,我的日志記錄模塊輸出仍會打印到控制台。
我的日志記錄設置基本上是:
ch = logging.StreamHandler(stream=sys.stdout)
ch.set_name('stdout')
addHandler(ch, logging.DEBUG, logger_=logger)
因此,在我看來,sys.stdout與unittest重定向后的print語句不同。
您可以執行此操作以強制將打印語句打印到sys.stdout:
from __future__ import print_function
import sys
print("hello", file=sys.stdout)
問題是在日志記錄為sys.stdout
處理程序后 ,unittest將sys.stdout
重定向到StringIO
。 在此之前, sys.stdout
等於sys.__stdout__
。
問題在於日志記錄模塊從未將其句柄更新為sys.stdout
。 它很高興繼續打印到原始的sys.stdout
流引用。 解決方案是檢測sys.stdout
仍然等於sys.__stdout__
。 如果不是,則它已被重定向,您必須通過刪除該處理程序並再次添加它來刷新StreamHandler的sys.stdout
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.