Je souhaite appeler un programme externe depuis Python. J'ai utilisé les deux Popen()
et call()
pour le faire.
Quelle est la différence entre les deux?
Mon objectif spécifique est d'exécuter la commande suivante à partir de Python. Je ne sais pas comment fonctionnent les redirections.
./my_script.sh > output
J'ai lu la documentation et il est dit que call()
c'est une fonction pratique ou une fonction de raccourci. Perdons-nous du pouvoir en utilisant call()
au lieu de Popen()
?
python
subprocess
popen
varunl
la source
la source
call()
semble être très claire. Pouvez-vous fournir un devis ou un lien pour que nous sachions sur quoi nous concentrer dans une réponse?Réponses:
Il existe deux façons de faire la redirection. Les deux s'appliquent à l'un
subprocess.Popen
ou l' autresubprocess.call
.Définissez l'argument de mot-clé
shell = True
ouexecutable = /path/to/the/shell
et spécifiez la commande telle que vous l'avez là.Puisque vous ne faites que rediriger la sortie vers un fichier, définissez l'argument mot-clé
où l'objet pointe vers le
output
fichier.subprocess.Popen
est plus général quesubprocess.call
.Popen
ne bloque pas, vous permettant d'interagir avec le processus pendant son exécution, ou de continuer avec d'autres choses dans votre programme Python. L'appel àPopen
renvoie unPopen
objet.call
fait bloc. Bien qu'il prenne en charge tous les mêmes arguments que lePopen
constructeur, afin que vous puissiez toujours définir la sortie du processus, les variables d'environnement, etc., votre script attend que le programme se termine etcall
renvoie un code représentant l'état de sortie du processus.est fondamentalement la même chose que d'appeler
call
est juste une fonction de commodité. Son implémentation dans CPython est dans subprocess.py :Comme vous pouvez le voir, c'est une mince enveloppe autour
Popen
.la source
L'autre réponse est très complète, mais voici une règle de base:
call
bloque:Popen
est non bloquant:la source