Frage Wie mache ich die Shell-Ausgabe umleiten (>) schreiben, während das Skript noch läuft?


Ich habe ein kurzes Skript geschrieben, das niemals endet. Dieses Skript erzeugt ständig Ausgaben, die ich hin und wieder überprüfen muss. Ich führe es auf einem Labor-Computer durch SSH und umleiten die Ausgabe in eine Datei in meinem public_html-Ordner auf diesem Computer.

python script.py > ~/public_html/results.txt

Die Ergebnisse werden jedoch nicht sofort angezeigt, wenn ich die Adresse aktualisiere. Die Ergebnisse zeigen sich, wenn ich das Programm beende, aber wie gesagt, es stoppt nicht von selbst. Ist das Redirect (>) Faul mit dem Schreiben? Gibt es eine Möglichkeit, die Ergebnisse in der Datei kontinuierlich (oder mit einem Intervall) zu aktualisieren?

Oder aktualisiert der Webserver die Datei nicht, während sie noch geschrieben wird?


10
2018-05-02 11:50


Ursprung


Antworten:


Sie müssen den Ausgang spülen sys.stdout.flush() (oder etw) wenn du es sofort sehen willst. Sehen Dies


15
2018-05-02 11:53



stdout ist gepuffert, wenn es nicht mit dem Terminal verbunden ist.

Sie können diese Richtlinie in die Zeilenpufferung über ändern stdbuf

stdbuf -oL python script.py > ~/public_html/results.txt

Sie müssen also Ihr Python-Skript nicht leeren und es effizient halten, wenn keine Zeilenpufferung erforderlich ist.


6
2018-05-02 12:40



Ich vermute, dass die Datei kontinuierlich geschrieben wird, aber der Webserver das geänderte Datum der Datei zum Zeitpunkt des Öffnens meldet und somit meldet, dass keine Änderung an der Datei stattgefunden hat und das Ergebnis zwischengespeichert wird (entweder bei der Webserver oder auf dem Client).

Ich würde zuerst ein erzwungenes Neuladen versuchen (Strg + F5 oder Strg + Umschalt + R oder Umschalt + <reload_button>) und sehen, ob das hilft. Wenn dies nicht der Fall ist, können Sie etwas anderes ausprobieren.

In einer separaten Shell auf dem Server, tun

tail -f ~/public_html/results.txt

Tail gibt die letzten n Zeilen der Datei aus (wobei n standardmäßig 10 ist). Der Parameter -f überwacht jedoch die Datei und meldet die Ausgabe weiterhin, wenn die Datei wächst. Dies gibt Ihnen zumindest Sicherheit, dass die Datei inkrementell geschrieben wird.

Ich hoffe das hilft.


1
2018-05-02 12:11