Pourquoi mon script Python n’écrit-il pas dans un fichier lorsqu’il est en arrière-plan sous Linux?

Je peux faire:

python script.py > logfile 2>&1 

et une fois que je le tue en utilisant ctrl c, je peux voir les modifications du fichier journal. Cependant, quand je fais:

 python script.py > logfile 2>&1 & 

Je ne peux pas voir de modifications dans le fichier journal. Comment puis-je créer un arrière-plan pour mon script et le faire écrire dans le fichier journal?

Vos écritures ne vont pas dans l’éther – elles sont mises en mémoire tampon. Après un arrêt en douceur (SIGTERM, pas SIGKILL), vous devriez également voir le contenu dans le fichier.

Alternativement, vous pouvez explicitement vider:

 sys.stdout.flush() 

… ou dites à Python de s’exécuter en mode non tamponné:

 python -u yourscript.py 

ou commencez votre script avec

 #!/usr/bin/python -u 

… pour vous assurer que le contenu est écrit. Cela aura bien sûr un impact négatif sur les performances, car votre script essaiera d’exécuter IO plus fréquemment.


(A part, #!/usr/bin/env python -u ne fonctionne pas correctement: seuls les noms de commandes et les arguments sont transférés d’une ligne shebang à une commande exécutée; votre système d’exploitation peut ou peut ne pas honorer plus que cela).