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.