2010-08-18 13 views
11

Ich mache Druckanweisungen in Python. Ich Ausführung mein Skript wie folgt:Python Druckanweisungen gepuffert mit> Ausgabeumleitung

python script.py > out.log nohup & 

Die Druckanweisungen nicht alle sind in out.log zeigt, aber das Programm Finishing ok.

Diese Codezeile ist in einer .sh Datei ich ausführen von ./script.sh

-Update zu tun: Das Protokoll alle Daten bekommt aber nicht, bis eine bestimmte Anzahl der Zeilen gedruckt werden. Es scheint die Ausgabe zu puffern.

Antwort

23

Wenn stdout an ein tty gesendet wird, wird es zwischengespeichert und jede Zeile wird geleert. Wird es jedoch in eine Datei oder Pipe umgeleitet, wird es vollständig gepuffert und nur periodisch gelöscht, wenn Sie den Puffer überlaufen.

Sie müssen nach jeder Zeile sys.stdout.flush() Aufrufe hinzufügen, wenn die Ausgabe sofort sichtbar sein soll, oder deaktivieren Sie die Pufferung vollständig. Siehe Disable output buffering nach Möglichkeiten, diese zu tun:

  1. Verwenden Sie die -u Befehlszeilenschalter
  2. Wrap sys.stdout in einem Objekt, das spült nach jedem
  3. Set PYTHONUNBUFFERED env var
  4. sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
schreiben
1

Haben Sie versucht:

  1. es ohne die Umleitung Laufen und sicherstellen, dass alles gedruckt wird als
  2. erwartet, dass es nicht durch ein Shell-Skript laufen, sondern einfach von einer Befehlszeile

?

Diese Schritte können Ihnen helfen, das Problem zu beheben.

+0

danke wird es versuchen – user420814

+0

# 1 und # 2 funktionieren beide wie erwartet – user420814

Verwandte Themen