GNU/Linux >> Tutoriels Linux >  >> Linux

Regarder quelque chose être écrit dans un fichier en direct avec la queue

Vous devrez peut-être également vider explicitement le tampon pour qu'il soit canalisé lors de la génération. En effet, la sortie n'est généralement imprimée que lorsque le tampon du canal se remplit (ce qui est en kilo-octets, je crois), et lorsque le message stdin se termine. C'est probablement pour économiser sur les lectures/écritures. Vous pouvez le faire après chaque impression, ou si vous faites une boucle, après la dernière impression dans la boucle.

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

Exécutez python avec l'indicateur non tamponné :

python -u myprog.py > output.txt

La sortie s'imprimera alors en temps réel.


Au lieu d'essayer de suivre un fichier en direct, utilisez tee Au lieu. Il a été conçu pour faire exactement ce que vous essayez de faire.

Du tee-shirt homme :

tee(1) - Page de manuel Linux

Nom tee - lit depuis l'entrée standard et écrit dans la sortie standard et les fichiers

Synopsis

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

Description

Copiez l'entrée standard dans chaque FICHIER, ainsi que dans la sortie standard.

-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

Si un FICHIER est -, recopiez-le sur la sortie standard.

Donc, dans votre cas, vous exécuteriez :

python myprog.py | tee output.txt

EDIT :Comme d'autres l'ont souligné, cette réponse se heurtera au même problème que OP avait à l'origine, à moins que sys.stdout.flush() est utilisé dans le programme python comme décrit dans la réponse acceptée de Davey. Les tests que j'ai effectués avant de publier cette réponse ne reflétaient pas avec précision le cas d'utilisation d'OP.

tee peut toujours être utilisé comme une méthode alternative - bien que moins qu'optimale - pour afficher la sortie tout en écrivant également dans le fichier, mais la réponse de Davey est clairement la bonne et la meilleure réponse.


Linux
  1. Tail -f, déterminer si un fichier n'est plus écrit ?

  2. Comment rediriger la sortie vers un fichier et stdout

  3. Comment suivre -f le dernier fichier journal avec un modèle donné

  4. Rediriger la sortie de la commande vers le fichier et le terminal

  5. Est-il sûr d'ouvrir un fichier en cours d'écriture par un script en cours d'exécution ?

10 commandes Linux Tail rapides avec des exemples

Bash :Écrire dans un fichier

Commande Tail Linux

Bash :ajouter au fichier

8 Commande Linux Tee avec exemples

Commande Linux Tail avec exemples