Ich versuche, ein Python-Skript daemonize, die derzeit im Vordergrund läuft. Allerdings muss ich immer noch in der Lage sein, seine Ausgabe zu sehen, die es derzeit auf stdout ablegt.
Also verwende ich das folgende Stück Code, der einen eindeutigen Dateinamen in/tmp erzeugt und dann sys.stdout dieser neuen Datei zuweist. Alle nachfolgenden Aufrufe von 'Drucken' werden dann in diese Protokolldatei umgeleitet.
import uuid
outfile = open('/tmp/outfile-' + str(uuid.uuid4()), 'w')
outfile.write("Log file for daemon script...\n")
sys.stdout=outfile
# Rest of script uses print statements to dump information into the /tmp file
.
.
.
Das Problem, das ich bin vor ist, dass, wenn ich die Datei in/tmp erstellt tail -f
, ich keine Ausgabe sehen. Sobald ich jedoch meinen Daemon-Prozess beendet habe, ist die Ausgabe in der/tmp-Logdatei sichtbar, weil Python die Dateidaten wegspült.
Ich möchte die/tmp Log-Datei in Echtzeit überwachen, daher wäre es toll, wenn irgendwie die Ausgabe in Echtzeit sichtbar gemacht werden kann.
Eine Lösung, die ich ausprobiert habe, war der Versuch, unbuffered IO zu verwenden, aber das half auch nicht.
Jede Hilfe würde sehr geschätzt werden!
Danke und Gruß, Warpkern
ist sys.stdout.flush() arbeiten? – sjr
flush() kann nicht mit umadressierten stdout helfen – hplbsh
@Stuart, wie bist du zu dieser Schlussfolgerung gekommen? – sjr