我使用了一个打印很多的内部库(一个脚本总共可以打印 40000 行),我想它可能会对性能产生不良影响。这是我公司的另一个团队开发的一个库,并进行了大量计算,它们打印以调试错误(我知道这不是一个好习惯,但为时已晚,因为已经有 100 个脚本在生产中)而且我正在开发使用 100 个脚本生成结果的脚本。
我怎样才能决定关闭所有这些打印?
我不是在问如何将这些行打印到文件中,而是完全省略它
我使用了一个打印很多的内部库(一个脚本总共可以打印 40000 行),我想它可能会对性能产生不良影响。这是我公司的另一个团队开发的一个库,并进行了大量计算,它们打印以调试错误(我知道这不是一个好习惯,但为时已晚,因为已经有 100 个脚本在生产中)而且我正在开发使用 100 个脚本生成结果的脚本。
我怎样才能决定关闭所有这些打印?
我不是在问如何将这些行打印到文件中,而是完全省略它
替换sys.stdout
为吃掉输出的对象:
import sys
class Null:
def write(self, text):
pass
def flush(self):
pass
print "One" # This gets output OK
old_stdout = sys.stdout
sys.stdout = Null()
print "Two" # This disappears
sys.stdout = old_stdout
print "Three" # Output, back to normal
最好的方法是简单地删除打印语句,因为没有任何开销。
或者,您可以将输出重定向到/dev/null
,这将有效地消除 I/O 开销,但不会消除系统调用。
为了节省系统调用,您可以用sys.stdout
不执行任何操作的 Writer 替换。例如:
class NullWriter():
def write(self, s): pass
sys.stdout = NullWriter()
如果您使用的是 python 3,则可以重载该print
函数,如本答案所示:
def print(*args, **kwargs):
pass