Il existe deux façons de faire la redirection. Les deux s'appliquent à l'un subprocess.Popenou l' autre subprocess.call.
Définissez l'argument de mot-clé shell = Trueou executable = /path/to/the/shellet 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 outputfichier.
subprocess.Popenest plus général que subprocess.call.
Popenne 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 à Popenrenvoie un Popenobjet.
call fait bloc. Bien qu'il prenne en charge tous les mêmes arguments que le Popenconstructeur, 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 callrenvoie 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()
callest 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?