Möglicherweise müssen Sie den Puffer auch explizit leeren, damit er bei der Generierung weitergeleitet wird. Dies liegt daran, dass die Ausgabe normalerweise nur gedruckt wird, wenn der Puffer der Pipe voll ist (was in Kilobytes ist, glaube ich) und wenn die stdin-Nachricht endet. Dies dient wahrscheinlich dazu, Lese- / Schreibvorgänge zu sparen. Sie können dies nach jedem Druck tun, oder wenn Sie eine Schleife ausführen, nach dem letzten Druck innerhalb der Schleife.
import sys
...
print('Some message')
sys.stdout.flush()
Führen Sie Python mit dem ungepufferten Flag aus:
python -u myprog.py > output.txt
Die Ausgabe erfolgt dann in Echtzeit.
Anstatt zu versuchen, eine Live-Datei zu verfolgen, verwenden Sie tee
stattdessen. Es wurde entwickelt, um genau das zu tun, was Sie zu tun versuchen.
Von Mann Tee:
tee(1) - Linux-Manpage
Name tee - von der Standardeingabe lesen und in die Standardausgabe und Dateien schreiben
Zusammenfassung
tee [OPTION]... [FILE]...
Beschreibung
Kopieren Sie die Standardeingabe in jede DATEI und auch in die Standardausgabe.
-a, --append
append to the given FILEs, do not overwrite
-i, --ignore-interrupts
ignore interrupt signals
--help
display this help and exit
--version
output version information and exit
Wenn eine DATEI - ist, kopiere sie erneut zur Standardausgabe.
In Ihrem Fall würden Sie also Folgendes ausführen:
python myprog.py | tee output.txt
BEARBEITEN:Wie andere darauf hingewiesen haben, wird diese Antwort auf dasselbe Problem stoßen, das OP ursprünglich hatte, es sei denn sys.stdout.flush()
wird im Python-Programm verwendet, wie in Daveys akzeptierter Antwort beschrieben. Die Tests, die ich vor dem Posten dieser Antwort durchgeführt habe, haben den Anwendungsfall von OP nicht genau widergespiegelt.
tee
kann immer noch als alternative - wenn auch weniger als optimale - Methode zum Anzeigen der Ausgabe verwendet werden, während gleichzeitig in die Datei geschrieben wird, aber Daveys Antwort ist eindeutig die richtige und beste Antwort.