2016-05-06 9 views
2

Ich habe einige Django-Verwaltungsbefehle, die Methoden in anderen Klassen aufrufen, um verschiedene Aufgaben auszuführen, z. B. das Abrufen von Daten von externen APIs.Anzeigen einzelner Zeilenfortschritte während des Django-Verwaltungsbefehls und Deaktivieren während der Tests

Bei diesen Verfahren mir die Ausgabe eine einzelne Zeile, die den Fortschritt anzeigt, so etwas wie:

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

Das funktioniert gut, aber wenn ich meine Tests laufen wird dieser ausgedruckt und Schrauben, um die .....E....F... Display. Ich könnte in allen meinen Tests print patchen, aber das scheint klobig.

Also (a) sollte ich diese Fortschrittslinie auf andere Weise ausgeben, und/oder (b) gibt es eine bessere Möglichkeit, diese Ausgabe zu unterdrücken, während Tests ausgeführt werden?

+0

Sie können Ihre eigenen Wrapper rund um drucken, die überprüfen, ob sys.stdout ein Terminal ist oder nicht und abhängig davon verhalten sich anders, z. \ r für Terminal \ n für Datei oder Rohr – Jerzyk

Antwort

1

Der erste Schritt besteht eigentlich darin, Druckanweisungen loszuwerden und sie durch logging zu ersetzen.

Mit Django-Protokollierung erhalten Sie viel mehr Kontrolle als beim Drucken und es ist nicht schwer zu installieren. Zwei der wichtigsten Funktionen sind, dass Sie steuern können, ob Protokollnachrichten an eine Datei oder an die Konsole gesendet werden. Sie können es auch basierend auf dem DEBUG-Flag weiter verfeinern.

Wahrscheinlich brauchen Sie diese Nachrichten nur auf Ihrem Dev-Server und nicht in der Produktion. Die Protokollierung kann Ihnen da helfen. Und noch wichtiger, wenn Tests ausgeführt werden, schaltet es das Debug-Flag aus, so dass Ihr ..... E .... F nicht überladen wird.

+0

Danke. Ich bin mir nicht sicher, ob ich die Protokollierung dafür verwenden soll, obwohl ich gerne korrigiert werde! Zunächst werden diese print-Anweisungen nur für Code verwendet, der über die Befehlszeile mit Verwaltungsbefehlen ausgeführt wird. Es ist also in Ordnung, wenn sie auf dem Live-Server ausgeführt werden. Zweitens werden sie verwendet, um eine einzelne Zeile zu drucken, deren Zahlen mit Fortschritt aktualisiert werden - kann die Protokollierung das tun? –

+0

ja. Stellen Sie sich das Protokollieren als die verfeinerte und verbesserte Version des Drucks vor. – e4c5

+0

Ich habe einige Protokollierung funktioniert, aber ich kann nicht sehen, wie die vorherige Zeile in der Konsole zu überschreiben, wie ich mit 'Print ('Hallo', Ende = '\ r')'. –

Verwandte Themen