GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Zusehen, wie etwas live mit tail in eine Datei geschrieben wird

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.


Linux
  1. Wie schreibe ich stderr in eine Datei, während ich tee mit einer Pipe verwende?

  2. Wie man -f die neueste Protokolldatei mit einem bestimmten Muster tailt

  3. Befehlsausgabeumleitung auf Datei und Terminal

  4. Verhalten von rsync mit Datei, die noch geschrieben wird?

  5. iftop - wie erzeuge ich eine Textdatei mit ihrer Ausgabe?

10 Schneller Linux-Tail-Befehl mit Beispielen

Bash:In Datei schreiben

Linux-Tail-Befehl

Bash:An Datei anhängen

8 Linux-Tee-Befehl mit Beispielen

Linux-Tail-Befehl mit Beispielen