Les scripts Python sortent en console même lorsqu’ils sont exécutés en arrière-plan

J’exécute un script python en arrière-plan, mais pourquoi continue-t-il à imprimer sur la console, même lorsqu’il est redirigé vers un fichier?

J’ai essayé la commande suivante:

python script.py & python script.py > output.txt & 

J’ai essayé avec un script simple:

 print "hello world" 

Avec

 python script.py & 

Il imprime toujours sur la console.

Mais

 python script.py > output.txt & 

fonctionne comme prévu et n’imprime pas sur la console.

Probablement, il sort sur stderr. Essaye ça:

 python script.py > output.txt 2>&1 & 

Sinon, il semble que vous ayez démarré une tâche en arrière-plan qui est toujours en cours d’exécution:

 python script.py & 

Tapez fg pour l’amener au premier plan, puis tuez-le avec Ctrl-C .

Même cela ne suffit pas parfois. Certaines applications écrivent dans / dev / console au lieu de / dev / stdout ou / dev / stderr. Les applications qui demandent un mot de passe le font souvent.

Cela aurait-il dû être

 python script.py> output.txt 2> & 1 & 
 python script.py >> output.txt 2> & 1 

Voir ceci pour une clarification sur l’utilisation de 2>&1

Le problème avec python ici est qu’il mettrait en mémoire tampon stdout et ne le déposerait pas sur le disque. Vous devez exécuter votre script comme ça

 python -u script.py > output.txt & 

Ou vous pouvez utiliser une sortie sans tampon ( stdout sans tampon dans python (comme dans python -u) à partir du programme )

Imprimez-vous en sortie standard ou en erreur standard? ce sont deux stream différents.

 Program 2> file # pipe standard error Program 2>&1 # pipe standard error to standard output (join streams) Program > file 2>&1 # pipe both channels to file