Führen Sie ein Programm im Hintergrund aus und leiten Sie deren Ausgaben in Echtzeit in eine Datei um

8

Ich möchte mehrere Python-Skripte gleichzeitig in einer Bash-Sitzung ausführen und ihre Ausgaben in Echtzeit überprüfen. Um diese Aufgabe zu erfüllen, schrieb ich ein einfaches Bash-Skript, das unten gezeigt wird:

%Vor%

Wenn ich den Befehl cat 1.output verwende, um zu überprüfen, was während der Ausführung gedruckt wurde, ist nichts zu sehen.

Nachdem ich eine Weile nachgedacht habe, merke ich, dass 1.output gefüllt werden muss, wenn 1.py die Ausführung beendet. Mit anderen Worten, die Methode, die ich hier verwendet habe, ist keine real time Mode.

Sie können darauf warten, dass diese Python-Skripte fertig sind. Die Tatsache ist leider, dass alle Python-Skripte tatsächlich lang laufende Programme sind, sie können nach Tagen oder Monaten abgeschlossen sein, und deshalb möchte ich ihre Ausgaben in Echtzeit überprüfen.

Sie können mir auch vorschlagen, die Python-Skripte so zu modifizieren, dass die Nachricht direkt in die Datei anstatt in stdout gedruckt wird. Entschuldigung, die Skripte hier sind zu komplex um sie zu verändern, da sind Chucks von print Funktion in ihnen.

Was kann ich jetzt tun?

    
Douglas Su 10.07.2015, 16:28
quelle

3 Antworten

22

Der Schalter -u und die entsprechende PYTHONUNBUFFERED -Umgebungsvariable zwingt stdout, ungepuffert zu sein. Versuchen Sie Folgendes:

%Vor%

oder

%Vor%

Beachten Sie, dass -u Nebenwirkungen hat: Lesen Sie das Dokument, um mehr zu erfahren.

Referenz:

Robᵩ 10.07.2015, 16:46
quelle
0

Wenn Sie eine Art Hauptschleife im Programm finden, die ein guter Indikator für den Fortschritt sein könnte, wäre es gut, in eine Datei zu schreiben. Wenn Sie sagen, dass die Ausgabe nicht gefüllt wird, bis der Ausgabestream von Python geschlossen wird, ist dies wahrscheinlich die einfachste Alternative.

    
bcdan 10.07.2015 16:33
quelle
0

Sie können versuchen, stderr / stdout in Ihren Skripten zu überschreiben, indem Sie Folgendes tun:

%Vor%

Dann schreiben alle Aufrufe von print in diese spezielle Datei, nicht in stdout. Das Hauptproblem könnte jedoch mit gepuffertem IO sein. Sie müssen irgendwie flush Inhalt einer solchen Datei auf die Festplatte.

    
Ivan Velichko 10.07.2015 16:35
quelle