Exécuter des sous-processus en arrière-plan
J'ai un script python qui prend une entrée, formats en une commande qui appelle un autre script sur le serveur, puis l'exécute à l'aide de sous-processus:
import sys, subprocess
thingy = sys.argv[1]
command = 'usr/local/bin/otherscript.pl {0} &'.format(thingy)
command_list = command.split()
subprocess.call(command_list)
Je ajouter &
à la fin parce que otherscript.pl
prend un certain temps à s'exécuter, et je préfère avoir exécuter en arrière-plan. Cependant, le script semble encore à exécuter, sans me donner le contrôle à la coquille, et je dois attendre jusqu'à l'exécution des finitions, pour revenir à mon invite. Est-il une autre façon d'utiliser subprocess
pleinement exécuter le script dans le fond?
- Popen c'est beaucoup plus flexible que tout droit sorti
call
- un peu plus de surcharge, mais il a le contrôle, vous êtes à la recherche pour
Vous devez vous connecter pour publier un commentaire.
&
est une fonction de coque. Si vous voulez qu'il fonctionne avecsubprocess
, vous devez spécifiershell=True
comme:Cela vous permettra d'exécuter une commande en arrière-plan.
Notes:
Depuis
shell=True
, les utilisations ci-dessuscommand
, pascommand_list
.À l'aide de
shell=True
permet à l'ensemble de la coque dispose d'. Ne pas le faire à moins quecommand
y compristhingy
provient de sources dignes de confiance.Alternative Plus Sûre
Cette alternative vous permettant de continuer à exécuter la commande en arrière-plan, mais est sûr parce qu'il utilise la valeur par défaut
shell=False
:Après cette instruction est exécutée, la commande exécuter en arrière-plan. Si vous voulez être sûr que c'est terminé, exécutez
p.wait()
.Si vous voulez exécuter en arrière-plan, je vous recommande d'utiliser
nohup
sortie qui serait normalement aller à la borne va vers un fichier appelé nohup.hors>/dev/null 2>&1 &
ne va pas créer de sortie et le renverra à l'arrière-plan