Les options pour popen
peut être utilisé en call
args,
bufsize=0,
executable=None,
stdin=None,
stdout=None,
stderr=None,
preexec_fn=None,
close_fds=False,
shell=False,
cwd=None,
env=None,
universal_newlines=False,
startupinfo=None,
creationflags=0
Alors...
myoutput = open('somefile.txt', 'w')
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=myoutput)
Ensuite, vous pouvez faire ce que vous voulez avec myoutput
En outre, vous pouvez faire quelque chose de plus proche d'une sortie canalisée comme celle-ci.
dmesg | grep hda
serait :
p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]
Il y a beaucoup d'informations intéressantes et utiles sur la page de manuel de python.
Si vous voulez écrire la sortie dans un fichier, vous pouvez utiliser l'argument stdout de subprocess.call
.
Il faut soit
None
(par défaut, stdout est hérité du parent (votre script))subprocess.PIPE
(vous permet de passer d'une commande/processus à un autre)- un objet fichier ou un descripteur de fichier (ce que vous voulez, pour que la sortie soit écrite dans un fichier)
Vous devez ouvrir un fichier avec quelque chose comme open
et passez l'entier du descripteur d'objet ou de fichier à call
:
f = open("blah.txt", "w")
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=f)
Je suppose que n'importe quel objet de type fichier valide fonctionnerait, comme un socket (halètement :)), mais je n'ai jamais essayé.
Comme marcog le mentionne dans les commentaires, vous voudrez peut-être é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.