Il existe deux façons de procéder à la redirection. Les deux s'appliquent soit à subprocess.Popen
o subprocess.call
.
-
Définir l'argument du mot-clé shell = True
o executable = /path/to/the/shell
et spécifier la commande comme vous l'avez fait ici.
-
Puisque vous redirigez simplement la sortie vers un fichier, définissez l'argument du mot-clé
stdout = an_open_writeable_file_object
où l'objet pointe vers le output
fichier.
subprocess.Popen
est plus général que subprocess.call
.
Popen
ne bloque pas, ce qui vous permet d'interagir avec le processus pendant qu'il est en cours d'exécution, ou de poursuivre d'autres activités dans votre programme Python. L'appel à Popen
renvoie un Popen
objet.
call
hace bloc. Bien qu'il prenne en charge tous les mêmes arguments que le Popen
constructeur, de sorte que vous pouvez toujours définir la sortie du processus, les variables d'environnement, etc., votre script attend que le programme se termine, et call
renvoie un code représentant l'état de sortie du processus.
returncode = call(*args, **kwargs)
est fondamentalement la même chose que d'appeler
returncode = Popen(*args, **kwargs).wait()
call
est juste une fonction de commodité. Son implémentation dans CPython est dans sous-processus.py :
def call(*popenargs, timeout=None, **kwargs):
"""Run command with arguments. Wait for command to complete or
timeout, then return the returncode attribute.
The arguments are the same as for the Popen constructor. Example:
retcode = call(["ls", "-l"])
"""
with Popen(*popenargs, **kwargs) as p:
try:
return p.wait(timeout=timeout)
except:
p.kill()
p.wait()
raise
Comme vous pouvez le voir, il s'agit d'une fine enveloppe autour de Popen
.
0 votes
Quelle partie de la documentation vous a dérouté ? La définition de
call()
semble être très clair. Pouvez-vous fournir une citation ou un lien afin que nous sachions sur quoi nous concentrer dans notre réponse ?