J'ai un script Python que je veux exécuter en tant que processus d'arrière-plan sous Windows.
Je peux le faire sous Linux avec:
python script.py &
puis déconnectez le processus du terminal avec:
disown
Sous Windows, tout ce que j'ai jusqu'à présent est celui-ci:
start /b python script.py
Cependant, si je ferme la fenêtre CMD, le script cesse de s'exécuter. Y a-t-il une commande supplémentaire qui me manque ici pour que le script continue de fonctionner en arrière-plan?
start
devrait déjà être la bonne direction. Cependant, /b
l'attache à la même console. Maintenant, le problème est que, lorsqu'une fenêtre de la console est fermée, tout processus associé à cette console le sera également.
Vous pouvez soit utiliser start
sans /b
, puis il sera exécuté dans une nouvelle console. Si vous souhaitez l'exécuter en arrière-plan sans une fenêtre de console, vous devez utiliser un outil VBScript ou tiers: Exécuter un fichier de commandes de manière complètement cachée
Cependant, dans ce cas, vous ne verrez plus la sortie stdout/stderr. Vous pouvez cependant le rediriger vers un fichier, en l’enveloppant dans un appel cmd /c your_command > stdout.txt 2> stderr.txt
et en démarrant celui-ci par l’une des méthodes susmentionnées (VBScript, outil tiers, ...).
Vous pouvez également masquer votre propre fenêtre de console avant de quitter. Je viens d'écrire un petit programme d'une ligne qui fait exactement cela (le code source est fondamentalement ShowWindow(GetConsoleWindow(), SW_HIDE)
): http://share.cherrytree.at/showfile-24286/hide_current_console.exe
De cette façon, vous pouvez utiliser start /b
, et lorsque vous voulez "fermer" votre console (le cacher techniquement), vous exécuterez hide_current_console & exit
qui masquerait la console, puis fermerait le processus cmd.exe (pas le processus python) - en un seul. ligne, car vous ne pouvez pas taper exit
après que la console ait déjà été masquée.