Ich schreibe ein Recherche-Tool, und ich habe kürzlich von der Verwendung von "print" -Anweisungen auf die Verwendung der in Python integrierten Protokollfunktionalität umgestellt. Dies, so argumentierte ich, würde es mir erlauben, dem Benutzer die Option zu geben, die Ausgabe in eine Datei zu speichern und sie auf dem Bildschirm auszugeben.Protokollierung von einer externen Anwendung
So weit so gut. Der Teil meines Codes, der sich in Python befindet, verwendet "logger.info" und "logger.error", um sowohl auf den Bildschirm als auch auf eine Datei zu schreiben. "Logger" ist der modulweite Logger. Dieser Teil wirkt wie ein Zauber.
Allerdings verwende ich "subprocess.call" an mehreren Stellen, um eine ausführbare Datei durch die Shell auszuführen. Also, über den gesamten Code, habe ich Linien wie
proc = subprocess.call(command)
Die Ausgabe dieses Befehls auf dem Bildschirm gedruckt werden würde, wie immer, aber es würde Dump nicht auf die Datei, die der Benutzer angegeben.
Eine mögliche Option wäre ein Rohr in die Datei zu öffnen:
proc = subprocess.call(command, stdout=f, stderr=subprocess.OUTPUT)
Aber das würde Dump nur auf die Datei und nicht auf den Bildschirm.
Grundsätzlich läuft meine Frage darauf hinaus: Gibt es eine Möglichkeit, die ich meine vorhandene Protokollfunktion nutzen kann, ohne einen anderen Handler für Dateien speziell für subprocess.call konstruieren zu müssen? (Vielleicht durch Umleiten der Ausgabe an den Logger?) Oder ist das angesichts der aktuellen Konfiguration unmöglich? Wenn letzteres, wie kann ich das Setup verbessern?
(Oh, auch wäre es toll, wenn die Protokollierung in ‚Echtzeit‘ ist, so dass Nachrichten von der ausführbaren Datei protokolliert werden, wie sie empfangen werden.)
Vielen Dank für jede Hilfe! :)
Lennart Regebros [StreamLogger-Klasse] (http:// Stackoverflow.com/a/4838875/190597) wird in Ihrer Situation gut funktionieren. – unutbu
Danke für die Referenz! Das funktioniert gut für meinen Fall. –