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