2016-05-06 29 views
2

我有一些Django管理命令調用其他類中的方法來執行各種任務,如從外部API獲取數據。在Django管理命令期間顯示單行進度並在測試期間禁用它

在這些方法中,我輸出顯示的進步,像一條線:

print('Fetched %d of %d' % (n, total) + ' '*30, end='\r') 

這工作正常,但是當我跑我的測試這種被打印出來,螺絲了.....E....F...顯示。我可以在我所有的測試中修補print,但看起來很笨重。 (a)我應該以其他方式輸出進度線,和/或(b)在運行測試時是否有更好的方法來抑制輸出?

+0

你可以有自己的打印包裝,它將檢查sys.stdout是否是一個終端,並根據它的行爲有所不同,例如, \ r爲終端\ n爲文件或管道 – Jerzyk

回答

1

第一步實際上是擺脫打印語句並將其替換爲logging

藉助django日誌記錄功能,您可以獲得比打印更多的控制權,而且安裝起來並不困難。其中兩個關鍵功能是可以控制日誌消息是否轉到文件或控制檯。您還可以根據DEBUG標誌進一步微調它。

您可能需要將此消息僅顯示在您的開發人員服務器上,而不是生產中。所以日誌記錄可以幫助你。更重要的是,當測試運行時,它將關閉調試標誌,以便您的...... E .... F不會混亂。

+0

謝謝。我不確定爲此使用日誌記錄,儘管很高興被糾正!首先,這些打印語句僅用於使用管理命令從命令行運行的代碼,因此,如果它們發生在實時服務器上,那麼這些語句很好。其次,它們被用來打印一個單獨的行,其數字隨着進度而更新 - 日誌可以做到這一點嗎? –

+0

是的。將日誌記錄看作印刷版的更精煉和增強版。 – e4c5

+0

我有一些日誌記錄工作,但我無法看到如何覆蓋控制檯中的前一行,就像我可以用'print('hello',end ='\ r')'。 –

相關問題