【问题标题】:How to use a with statement to disable printing?如何使用 with 语句禁用打印?
【发布时间】:2019-08-07 11:25:38
【问题描述】:
我想用这样的东西:
print('Hello')
with dont_print():
print('some other text')
print('more text')
print('World')
输出应该是:
Hello
World
所以dont_print 中的所有内容都不会被打印出来。
我怎样才能得到这样的功能?
【问题讨论】:
标签:
python
python-3.x
printing
【解决方案1】:
from unittest.mock import patch
print('Hello')
with patch('builtins.print'):
print('some other text')
print('more text')
print('World')
【解决方案2】:
将您的标准输出覆盖到某个文件对象。这是您的修改版本。
import sys, os
# Disable
def blockPrint():
sys.stdout = open(os.devnull, 'w')
# Restore
def enablePrint():
sys.stdout = sys.__stdout__
print('Hello')
blockPrint()
print('some other text')
print('more text')
enablePrint()
print('World')
更多关于here
【解决方案3】:
您可以使用redirect_stdout 作为上下文管理器,通过os.devnull 将标准输出重定向到虚无:
import os
from contextlib import redirect_stdout
print('Hello')
with open(os.devnull, 'w') as f:
with redirect_stdout(f):
print('some other text')
print('more text')
print('World')