2013-06-27 124 views
0

我使用内部库打印很多(一个脚本总共可打印40000行),并且我认为它可能对性能造成不良影响。这是由我公司的另一个团队开发的一个库,并进行了大量计算,它们打印以调试错误(并且我知道这不是一个好习惯,但由于生产中已有100个脚本,所以太晚了) 和我开发一个使用100个脚本来产生结果的脚本。python中的无效打印语句

我该如何决定关闭所有这些打印?

我不问如何打印这些线路到文件,但完全忽略它

+4

嗯...删除'print'报表? – Doorknob

+0

实习生图书馆是什么意思?另外,到40000你的意思是它打印40000次?你能给我们谈​​论的图书馆提供一个特定的链接吗?请让你的问题更清楚,以便我们能够帮助你。 – tatsuhirosatou

+0

您是否检查过这个内部函数库是否可以与各种级别的消息“冗长”一起使用?另外你到目前为止尝试了什么? –

回答

7

替换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 
+1

非常有趣的解决方案。我不得不添加'def flush(self):pass'来使它工作。 – furas

+0

请在您的解决方案中添加'def flush(self):pass',这样我可以标记为已回答 – nam

+0

这是一种破解,而不是您应该将其放入部署的应用程序中的解决方案。你可以选择在其他脚本上进行搜索/替换以将日志记录从'print'语句切换到使用'logging'模块的语句? –

2

,最好的办法是简单地删除打印报表,因为那里 没有任何开销。

或者,您可以将输出重定向到/dev/null,这将使 有效地消除I/O开销,但不会删除系统调用。

为了节省系统调用,您可以用一个不做任何事情的Writer替换sys.stdout。 例如:

class NullWriter(): 
    def write(self, s): pass 

sys.stdout = NullWriter() 

显然,这已经askedsolved之前。也here

在你使用Python 3的情况下,你可以重载print功能 看到in this answer

def print(*args, **kwargs): 
    pass