2013-06-27 170 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