簡體   English   中英

如何在 Python 中運行單元測試時臨時隱藏 stdout 或 stderr

[英]How to temporary hide stdout or stderr while running a unittest in Python

我有一個有問題的第三方 python 模塊,它在導入時輸出到 stdout 或 stderr,這破壞了我的單元測試的輸出。

如何臨時重定向stdout以隱藏其輸出。

限於 Python 2.5 語法 :)

更新,我忘了提到sys.stdoutsys.__stderr__方法在這種情況下不起作用。 據我所知,這個有問題的模塊正在使用本機代碼。

您還可以使用mock讓您在導入模塊時為您修補sys.stdoutsys.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.stdoutsys.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.

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