簡體   English   中英

發現在python中使用哪個流打印

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM