我有一個錯誤的第三方python模塊,它在導入時輸出到stdout或stderr,這是打破了我的unittests的輸出。如何在Python中運行unittest時臨時隱藏stdout或stderr
如何臨時重定向stdout
以隱藏其輸出。
限於Python 2.5的語法:)
更新,我忘了提,sys.stdout
和sys.__stderr__
方法並不在這種情況下工作。據我所知,這個錯誤的模塊正在使用本機代碼。
我有一個錯誤的第三方python模塊,它在導入時輸出到stdout或stderr,這是打破了我的unittests的輸出。如何在Python中運行unittest時臨時隱藏stdout或stderr
如何臨時重定向stdout
以隱藏其輸出。
限於Python 2.5的語法:)
更新,我忘了提,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
您還可以使用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
被導入時的第三方模塊。
`os.devnull`,學到了一些東西! +1 – juliomalegria 2011-12-15 16:35:51
你的例子應該工作,我甚至試圖改變`sys .__ stdout__`和`sys .__ stderr__`,但仍然得到輸出`:[`` – sorin 2011-12-15 17:28:53