【发布时间】:2011-10-07 19:59:45
【问题描述】:
我有一个由足够多的模块组成的大型项目,每个模块都会向标准输出打印一些内容。现在随着项目规模的扩大,没有大的。的print 语句在标准输出上打印了很多,这使得程序相当慢。
所以,我现在想在 runtime 决定是否将任何内容打印到标准输出。我无法对模块进行更改,因为它们有很多。 (我知道我可以将标准输出重定向到一个文件,但即使这样也相当慢。)
所以我的问题是如何将标准输出重定向到无,即如何使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 方法(什么都不做)的类,并将标准输出重定向到此类的实例。
class DontPrint(object):
def write(*args): pass
dp = DontPrint()
sys.stdout = dp
python 中是否有为此的内置机制?或者还有什么比这更好的吗?
【问题讨论】:
-
我刚刚发现了一件奇怪的事情。将 sys.stdout 变为 None 实际上在我的程序中有效,尽管我不确定为什么。我在编码重定向到 os.devnull 时遇到了真的奇怪的问题,所以我尝试只使用 None,它可以工作。可能与我在 Django 单元测试中做这件事有关,但我不确定。
-
@Teekin 它确实有效,并且在与 Django 无关的上下文中。
标签: python python-2.7