subprocess.communicate in Echtzeit loggen
Verfasst: Freitag 27. Mai 2011, 12:32
Hallo Gemeinde,
(mein erster Beitrag, bitte nicht zu sehr schimpfen wenn ich was falsch mach)
ich versuche von meiner langjährigen bash-Gewohnheit etwas loszukommen und meine Skripte in Python zu verfassen. Mich beschäftigt dabei vor allem folgendes.
Wenn ich einen Systembefehl absetze (LINUX) tu ich das aktuell folgendermaßen:
Mein Problem dabei ist, dass das Programm erst Zugriff auf die Ausgaben pout und perr hat wenn das Kommando abgearbeitet wurde. Ich sollte aber jede Zeile gleich, zum Beispiel, in einer Log-Datei wiederfinden können.
Wenn ich das Kommando umschriebe nach, z.B.
würde das erste Ziel der unmittelbaren Einsehbarkeit zwar erreicht, aber dafür leite ich die Ausgaben dann für Python unerreichbar um und könnte sie dort nicht mehr auswerten.
Was mache ich da am besten?
(mein erster Beitrag, bitte nicht zu sehr schimpfen wenn ich was falsch mach)
ich versuche von meiner langjährigen bash-Gewohnheit etwas loszukommen und meine Skripte in Python zu verfassen. Mich beschäftigt dabei vor allem folgendes.
Wenn ich einen Systembefehl absetze (LINUX) tu ich das aktuell folgendermaßen:
Code: Alles auswählen
# Beispiel eines Kommandos mit viel Ausgabe
cmd = "rsync -av src/ dst/"
# subprozess starten, stdout und stderr in eine pipe senden
process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# stdout und stderr aus pipe holen
pout, perr = process.communicate()
Wenn ich das Kommando umschriebe nach, z.B.
Code: Alles auswählen
# Beispiel eines Kommandos mit viel Ausgabe
cmd = "rsync -av src/ dst/ 2>&1 >> beispiel.log"
# subprozess starten, stdout und stderr in eine pipe senden
process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# stdout und stderr aus pipe holen
# wäre aber so immer leer, da die Ausgaben ja in die Datei geschickt wurden!
pout, perr = process.communicate()
Was mache ich da am besten?