web-dev-qa-db-fra.com

Windows - Exécuter le processus en arrière-plan après la fermeture de cmd

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?

12
multigoodverse

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.

5
CherryDT