Was ist der beste Weg, um Python-Drucke umzuschalten?

8

Ich betreibe Python 2.4 in einer Game Engine und möchte bei Bedarf alle Drucke ausschalten können. Zum Beispiel möchte ich die Drucke für einen Debug-Build haben und dann für einen Release-Build deaktiviert. Es ist auch wichtig, dass es so transparent wie möglich ist.

Meine Lösung dazu im C-Code der Engine ist die printf -Funktion innerhalb eines vararg -Makros zu haben und das zu definieren, um in einem Release-Build nichts zu tun.

Das ist meine aktuelle Lösung:

%Vor%

Es erleichtert das Umschalten von Ausdrucken, aber es gibt möglicherweise eine bessere Möglichkeit, die Zeichenfolge zu formatieren. Mein Hauptproblem ist, dass dies tatsächlich eine Menge mehr Funktionsaufrufe zum Programm hinzufügt.

Ich frage mich, ob Sie irgendetwas dafür tun können, wie das Schlüsselwort print funktioniert?

    
Nathan Ross Powell 02.04.2009, 11:49
quelle

6 Antworten

12

Ja, Sie können sys.stdout zuweisen, was immer Sie wollen. Erstellen Sie eine kleine Klasse mit einer write -Methode, die nichts bewirkt:

%Vor%

Mit der gleichen Technik können Sie Ihre Ausdrucke auch in einer Datei protokollieren lassen, indem Sie sys.stdout auf ein geöffnetes Dateiobjekt setzen.

    
Daren Thomas 02.04.2009, 11:50
quelle
10

Ich weiß, dass eine Antwort bereits als richtig markiert wurde, aber Python hat ein Debug-Flag, das eine sauberere Lösung bietet. Du benutzt es so:

%Vor%

Wenn Sie Python mit -O oder -OO aufrufen (wie Sie es normalerweise für einen Release-Build tun würden), wird __debug__ auf False gesetzt. Noch besser ist, dass __debug__ ein Sonderfall für den Interpreter ist; Es wird diesen Code tatsächlich entfernen, wenn er die pyc/pyo -Dateien schreibt, wodurch der resultierende Code kleiner / schneller wird. Beachten Sie, dass Sie __debug__ keine Werte zuweisen können. Daher basiert es vollständig auf diesen Befehlszeilenargumenten.

    
DNS 02.04.2009 14:17
quelle
8

Das Logging-Modul ist der "beste" Weg .. obwohl ich oft einfach etwas einfaches benutze. .

%Vor%     
dbr 02.04.2009 12:00
quelle
3

Verwenden Sie nicht print, sondern erstellen Sie eine Konsolenklasse, die alle Druckvorgänge abwickelt. Rufen Sie einfach die Konsole an und die Konsole kann entscheiden, ob sie tatsächlich gedruckt werden soll oder nicht. Eine Konsolenklasse ist auch nützlich für Dinge wie Fehler- und Warnmeldungen oder umleiten wo die Ausgabe geht.

    
Matthew Olenik 02.04.2009 11:52
quelle
1

Wenn Sie wirklich den Druck umschalten möchten:

%Vor%

Ich empfehle jedoch, dass Sie nur print für den Wegwerfcode verwenden. Verwende logging für echte Apps wie die ursprüngliche Frage beschreibt. Es ermöglicht eine gleitende Skala von Ausführlichkeit, so dass Sie nur die wichtige Protokollierung oder ausführlichere Protokollierung von normalerweise weniger wichtigen Details haben können.

%Vor%

Zum Beispiel könnte es sinnvoll sein, Debugging-Logs in Ihren Code einzufügen. Dann, um sie zum Schweigen zu bringen, ändern Sie Ihr Level auf eine höhere Stufe, eine von INFO , WARN oder WARNING , ERROR oder CRITICAL oder FATAL

%Vor%

In einem Skript sollten Sie dies einfach in basicConfig wie folgt festlegen:

%Vor%

Eine genauere Verwendung der Protokollierung finden Sie in den Dokumenten .

Aaron Hall 09.09.2015 21:01
quelle
0

Ich habe diese Frage auf einem anderer Beitrag wurde aber die Frage als doppelt markiert:

Wie auch immer, hier ist, was ich tun würde:

%Vor%

Leider können Sie die py2-Drucksyntax print 'foo'

nicht beibehalten     
taesu 09.09.2015 20:14
quelle

Tags und Links