Si desea escribir la salida en un archivo, puede usar el argumento stdout de subprocess.call.
Toma None, subprocess.PIPEun objeto de archivo o un descriptor de archivo. El primero es el predeterminado, stdout se hereda del padre (su script). El segundo le permite pasar de un comando / proceso a otro. El tercero y el cuarto son los que desea, tener la salida escrita en un archivo.
Debe abrir un archivo con algo como openy pasar el objeto o el descriptor de archivo entero a call:
f = open("blah.txt", "w")
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml",  "/tmp/video_xml"], stdout=f)
Supongo que cualquier objeto válido similar a un archivo funcionaría, como un socket (jadeo :)), pero nunca lo he intentado.
Como menciona marcog en los comentarios, es posible que también desee redirigir stderr, puede redirigir esto a la misma ubicación que stdout con stderr=subprocess.STDOUT. Cualquiera de los valores mencionados anteriormente también funciona, puede redirigir a diferentes lugares.
     
                
subprocess.call(["echo", "1", ">>", "t.txt"], shell=True)debería funcionar.shlex.quotesi está pasando datos posiblemente sucios a una subcapa.with open("blah.txt","w") as f: subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=f)@SkurmedelLas opciones para
popense pueden utilizar encallEntonces...
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=myoutput)Entonces puede hacer lo que quiera con
myoutput(que debería ser un archivo por cierto).Además, puede hacer algo más parecido a una salida canalizada como esta.
dmesg | grep hdasería:
p1 = Popen(["dmesg"], stdout=PIPE) p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE) output = p2.communicate()[0]Hay mucha información interesante y útil en la página del manual de Python .
fuente
También puede simplemente llamar al script desde la terminal, enviando todo a un archivo, si eso ayuda. De esta manera:
$ /path/to/the/script.py > output.txtEsto sobrescribirá el archivo. Puede usar
>>para agregarlo.Si también desea que se registren errores en el archivo, utilice
&>>o&>.fuente