2013-08-27 113 views
0

我的程序是相當大的,我要記錄它的所有打印語句,結果我實現如何記錄所有打印語句

F = open('testy.txt','w') 
sys.stdout = F 

if app.button_press() == True and app.return_data(): 
    data = app.return_data() 
    main(data[0],data[1],data[2],data[3],data[4],data[5],data[6],data[7],data[8]) 

F.close() 

這是我使用的小程序做了幾個打印語句,但這個程序有幾百個我猜,當我運行我的程序它凍結我認爲它有很多的打印語句,併發生內存溢出,因此我怎樣才能將我的所有打印語句記錄到.txt文件而不會影響它的功能?

+1

你試過用sys.stdout.flush()刷新嗎? – darmat

+0

你真的不應該這樣做。設置日誌記錄並將其配置爲如果要查看它,則記錄到stdout,如果要記錄到文件,則將其配置爲文件。 – Will

回答

2

您不應該使用print語句進行日誌記錄,也不應該將生產代碼中的標準(或任何其他標準流)重定向。相反,您應該使用logging模塊編寫消息,並設置任何處理程序,您的情況可能是file handlerrotating file handler,您需要將日誌消息記錄到正確的位置。

如果你已經有太多現有的代碼打印日誌消息來重構一次,我建議實施logging,使用它進行所有日誌記錄,建立一個類似文件的對象,將標準分流到logging捕獲現有的日誌消息,然後重構所有基於打印的日誌記錄。

+0

你能提供一個例子,因爲我從來沒有使用過日誌記錄模塊 –