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).