GNU/Linux >> Linux Esercitazione >  >> Linux

Guardare qualcosa che viene scritto su un file dal vivo con la coda

Potrebbe anche essere necessario svuotare in modo esplicito il buffer affinché venga reindirizzato al momento della generazione. Questo perché l'output viene in genere stampato solo quando il buffer della pipe si riempie (che è in kilobyte credo) e quando il messaggio stdin termina. Questo è probabilmente per risparmiare in lettura/scrittura. Puoi farlo dopo ogni stampa o, se stai eseguendo un ciclo, dopo l'ultima stampa all'interno del ciclo.

import sys
...
print('Some message')
sys.stdout.flush()

Esegui python con il flag unbuffered:

python -u myprog.py > output.txt

L'output verrà quindi stampato in tempo reale.


Invece di cercare di eseguire la coda di un file live, usa tee invece. È stato creato per fare esattamente quello che stai cercando di fare.

Da uomo tee:

tee(1) - Pagina man di Linux

Nome tee - legge dallo standard input e scrive sullo standard output e sui file

Sinossi

tee [OPTION]... [FILE]...

Descrizione

Copia lo standard input in ogni FILE e anche nello standard output.

-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

Se un FILE è -, copialo di nuovo sullo standard output.

Quindi nel tuo caso eseguiresti:

python myprog.py | tee output.txt

EDIT:come altri hanno sottolineato, questa risposta incontrerà lo stesso problema che OP aveva originariamente a meno che sys.stdout.flush() è usato nel programma Python come descritto nella risposta accettata di Davey. I test che ho eseguito prima di pubblicare questa risposta non riflettevano accuratamente il caso d'uso di OP.

tee può ancora essere utilizzato come metodo alternativo, anche se non ottimale, per visualizzare l'output mentre si scrive anche sul file, ma la risposta di Davey è chiaramente la risposta corretta e migliore.


Linux
  1. Tail -f, Determina se un file non viene più scritto?

  2. Come generare file e ignorare le righe che iniziano con "?"?

  3. Come eseguire il tail -f dell'ultimo file di registro con un dato modello

  4. L'output del comando reindirizza al file e al terminale

  5. Comportamento di rsync con il file che è ancora in fase di scrittura?

10 Comando rapido di coda di Linux con esempi

Bash:Scrivi su file

Comando coda di Linux

Bash:aggiungi al file

8 Comando Tee Linux con esempi

Comando Tail Linux con esempi