Globale Variable über Modulgrenzen (vgl. "extern"
Verfasst: Montag 5. Mai 2008, 08:54
Hallo zusammen!
Seit kurzem darf/muss ich mich mit Python beschäftigen und trotz meines Addison Wesley Referenzbuches bleiben Fragen offen, die ich euch gern stellen möchte.
Ab Python 2.3 gibt es offenbar logging im Standard. Nun möchte ich für ein größeres Tools, welches aus verschiedenen .py Modulen besteht, eine zentrale Loggingdatei (FileHandler) verwenden. Dazu sollte die Instanz von logging, die über die Factorymethode getLogger geliefert wird, in jedem Modul verfügbar sein. Ich exportiere dazu den Namen des Loggers in eine Umgebungsvariable und hole den Inhalt der Umgebungsvariable in jedem Modul wieder ab, um mir jene Loggerinstanz aufbauen zu können, die im Hauptmodul definiert wurde.
Meine Frage: Kann man, ähnlich wie in C mit extern, globale Variablen in Modul A deklarieren, die man nicht nur in allen Funktionen innerhalb von A, sondern auch in Modulen B, C etc. verwenden kann? Ich vermute mal: Nein. Aber gibt es eine bessere Lösung als die o.g. mit Umweg über os.environ?
Beispiel A.py
In B.py
Seit kurzem darf/muss ich mich mit Python beschäftigen und trotz meines Addison Wesley Referenzbuches bleiben Fragen offen, die ich euch gern stellen möchte.
Ab Python 2.3 gibt es offenbar logging im Standard. Nun möchte ich für ein größeres Tools, welches aus verschiedenen .py Modulen besteht, eine zentrale Loggingdatei (FileHandler) verwenden. Dazu sollte die Instanz von logging, die über die Factorymethode getLogger geliefert wird, in jedem Modul verfügbar sein. Ich exportiere dazu den Namen des Loggers in eine Umgebungsvariable und hole den Inhalt der Umgebungsvariable in jedem Modul wieder ab, um mir jene Loggerinstanz aufbauen zu können, die im Hauptmodul definiert wurde.
Meine Frage: Kann man, ähnlich wie in C mit extern, globale Variablen in Modul A deklarieren, die man nicht nur in allen Funktionen innerhalb von A, sondern auch in Modulen B, C etc. verwenden kann? Ich vermute mal: Nein. Aber gibt es eine bessere Lösung als die o.g. mit Umweg über os.environ?
Beispiel A.py
Code: Alles auswählen
# setup logger (each module in the current python VM has access)
logger_config = ConfigDir + os.sep + Config['LoggerConfig']
logging.config.fileConfig(logger_config)
os.environ['LOGGER_NAME'] = Config['LoggerName']
Code: Alles auswählen
logger = logging.getLogger(os.environ.get('LOGGER_NAME'))