Si desea escribir la salida en un archivo, puede usar el argumento stdout de subprocess.call
.
Toma None
, subprocess.PIPE
un 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 open
y 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.quote
si 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
popen
se pueden utilizar encall
Entonces...
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 hda
serí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.txt
Esto sobrescribirá el archivo. Puede usar
>>
para agregarlo.Si también desea que se registren errores en el archivo, utilice
&>>
o&>
.fuente