在python中将stdout重定向为“ nothing”
问题内容:
我有一个大型项目,其中包含足够多的模块,每个模块都将一些内容打印到标准输出中。现在,随着项目规模的扩大,没有大型项目。的print
语句在标准输出上打印很多,这使程序变慢了很多。
因此,我现在想在 运行时
决定是否将任何内容打印到标准输出。我无法在模块中进行更改,因为它们很多。(我知道我可以将标准输出重定向到文件,但即使这样也很慢。)
所以我的问题是如何将stdout重定向为空,即如何使print
语句不执行任何操作?
# I want to do something like this.
sys.stdout = None # this obviously will give an error as Nonetype object does not have any write method.
目前,我唯一的想法是制作一个具有write方法的类(不执行任何操作),然后将stdout重定向到该类的实例。
class DontPrint(object):
def write(*args): pass
dp = DontPrint()
sys.stdout = dp
在python中有内置的机制吗?还是有比这更好的东西?
问题答案:
跨平台:
import os
import sys
f = open(os.devnull, 'w')
sys.stdout = f
在Windows上:
f = open('nul', 'w')
sys.stdout = f
在Linux上:
f = open('/dev/null', 'w')
sys.stdout = f