[英]How to temporary hide stdout or stderr while running a unittest in Python
我有一個有問題的第三方 python 模塊,它在導入時輸出到 stdout 或 stderr,這破壞了我的單元測試的輸出。
如何臨時重定向stdout
以隱藏其輸出。
限於 Python 2.5 語法 :)
更新,我忘了提到sys.stdout
和sys.__stderr__
方法在這種情況下不起作用。 據我所知,這個有問題的模塊正在使用本機代碼。
您還可以使用mock
讓您在導入模塊時為您修補sys.stdout
和sys.stderr
。 使用此策略的測試模塊的示例是:
import os
devnull = open(os.devnull, 'w')
from mock import patch
with patch('sys.stdout', devnull):
with patch('sys.stderr', devnull):
import bad_module
# Test cases writen here
其中bad_module
是在導入時打印到sys.stdout
和sys.stderr
第三方模塊。
你可以這樣做:
>>> import sys, os
>>> _stderr = sys.stderr
>>> _stdout = sys.stdout
>>> null = open(os.devnull,'wb')
>>> sys.stdout = sys.stderr = null
>>> print("Bleh")
>>> sys.stderr = _stderr
>>> sys.stdout = _stdout
>>> print("Bleh")
Bleh
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.