2009-06-08 8 views
2

Ich möchte die Debug-Ausgaben von Produktionen trennen, indem Sie eine Variable definieren, die verwendet werden kann, um das Modul zu verarbeiten. Es kann nicht in der Umgebung definiert werden. Irgendwelche Vorschläge für Globals wiederverwendet über Klassen in Modulen? Zusätzlich gibt es eine Möglichkeit, dieses variable Flag zu konfigurieren, um appengine mitzuteilen, dass dieser Code nicht verwendet wird.Debug-Variable in Python

Antwort

12

Werfen Sie einen Blick auf die logging module, die vollständig von Google App Engine unterstützt wird. Sie können Protokollierungsebenen wie Debug, Warnung, Fehler usw. angeben. Sie werden in der DevServer-Konsole angezeigt und auch im Anforderungsprotokoll gespeichert.

Wenn Sie nach spezifischen Code nur ausgeführt wird, wenn der Dev-Server ausgeführt wird, können Sie dies tun:

if os.environ['SERVER_SOFTWARE'].startswith('Development'): 
    print 'Hello world!' 

Die SERVER_SOFTWARE Variable wird immer dann gesetzt, die Google App Engine.

Wie für modulspezifische Variablen; Module sind Objekte und können Werte wie jedes andere Objekt haben:

my_module.debug = True 
+0

+1 für das Logging-Modul, das ist wirklich die beste Antwort auf @ Dhaval das eigentliche Problem, wie er es erklärt. –

+0

thx Blixit, mir war die Variable server_software nicht bekannt – dhaval

+0

@dhaval: Umgebungsvariablen sind in allen Betriebssystemen verfügbar, so dass diese Technik überall funktioniert - stellen Sie sicher, dass Sie die Umgebungsvariable selbst setzen, wenn Sie nicht auf GAE sind. –

1

Alle Variablen auf Modulebene für alle Klassen in das Modul global sind.

Hier ist meine Datei: mymodule.py

import this 
import that 

DEBUG = True 

class Foo(object): 
    def __init__(self): 
     if DEBUG: print self.__class__, "__init__" 
     # etc. 

class Bar(object): 
    def do_work(self): 
     if DEBUG: print self.__class__, "do_work" 
     # etc. 

Ein einzelner, auf Modulebene DEBUG Variable wird von allen Instanzen dieser beiden Klassen zu finden. Andere Module (z. B. this.py und that.py) können ihre eigenen DEBUG Variablen haben. Diese wären this.DEBUG oder that.DEBUG und sind nicht verwandt.

+0

thx @Lott, ich definierte die Variable in __main und fehlgeschlagen – dhaval