如何在Python中运行unittest时临时隐藏stdout或stderr

sor*_*rin 11 python

我有一个错误的第三方python模块,它在导入时输出到stdout或stderr,这打破了我的单元测试的输出.

如何临时重定向stdout以隐藏其输出.

限于Python 2.5语法:)

更新,我忘了,更不用说sys.stdoutsys.__stderr__方法并不在这种情况下工作.据我所知,这个有问题的模块正在使用本机代码.

jco*_*ado 21

您也可以使用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
Run Code Online (Sandbox Code Playgroud)

正在导入的bad_module第三方模块在何处sys.stdout以及sys.stderr何时正在导入.


Mat*_*ttH 18

你可以这样做:

>>> 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
Run Code Online (Sandbox Code Playgroud)