Le opzioni per popen
può essere utilizzato in 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
Quindi...
myoutput = open('somefile.txt', 'w')
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=myoutput)
Quindi puoi fare quello che vuoi con myoutput
Inoltre, puoi fare qualcosa di più simile a un output reindirizzato come questo.
dmesg | grep hda
sarebbe:
p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]
Ci sono un sacco di belle informazioni utili nella pagina di manuale di Python.
Se vuoi scrivere l'output in un file puoi usare l'argomento stdout di subprocess.call
.
Ci vogliono entrambi
None
(l'impostazione predefinita, stdout è ereditata dal genitore (il tuo script))subprocess.PIPE
(consente di reindirizzare da un comando/processo a un altro)- un oggetto file o un descrittore di file (quello che vuoi, per avere l'output scritto in un file)
Devi aprire un file con qualcosa come open
e passa l'intero descrittore di oggetto o file a call
:
f = open("blah.txt", "w")
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=f)
Immagino che qualsiasi oggetto simile a un file valido funzionerebbe, come un socket (gasp :)), ma non ci ho mai provato.
Come marcog menziona nei commenti, potresti voler reindirizzare anche stderr, puoi reindirizzare questo nella stessa posizione di stdout con stderr=subprocess.STDOUT
. Anche uno qualsiasi dei valori sopra menzionati funziona, puoi reindirizzare a luoghi diversi.