Il existe deux façons de faire la redirection. Les deux s'appliquent à l'un subprocess.Popen
ou l' autre subprocess.call
.
Définissez l'argument de mot-clé shell = True
ou executable = /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é
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, 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 un Popen
objet.
call
fait bloc. Bien qu'il prenne en charge tous les mêmes arguments que le Popen
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 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 subprocess.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, c'est une mince enveloppe autour Popen
.
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?