Si vous souhaitez écrire la sortie dans un fichier, vous pouvez utiliser l' argument stdout de subprocess.call
.
Il faut None
, subprocess.PIPE
un objet de fichier ou un descripteur de fichier. Le premier est la valeur par défaut, stdout est hérité du parent (votre script). Le second vous permet de passer d'une commande / processus à un autre. Les troisième et quatrième sont ce que vous voulez, pour avoir la sortie écrite dans un fichier.
Vous devez ouvrir un fichier avec quelque chose comme open
et passer l'entier d'objet ou de descripteur de fichier à call
:
f = open("blah.txt", "w")
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=f)
J'imagine que tout objet de type fichier valide fonctionnerait, comme une prise (gasp :)), mais je n'ai jamais essayé.
Comme marcog le mentionne dans les commentaires, vous pouvez également rediriger stderr, vous pouvez le rediriger vers le même emplacement que stdout avec stderr=subprocess.STDOUT
. Toutes les valeurs mentionnées ci-dessus fonctionnent également, vous pouvez rediriger vers différents endroits.
subprocess.call(["echo", "1", ">>", "t.txt"], shell=True)
devrait fonctionner.shlex.quote
si vous transmettez des données potentiellement sales à un sous-shell.with open("blah.txt","w") as f: subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=f)
@SkurmedelLes options pour
popen
peuvent être utilisées danscall
Alors...
Ensuite, vous pouvez faire ce que vous voulez avec
myoutput
(ce qui devrait être un fichier btw).En outre, vous pouvez faire quelque chose de plus proche d'une sortie canalisée comme celle-ci.
serait:
Il y a beaucoup d'informations intéressantes et utiles sur la page de manuel python .
la source