Las opciones para popen
se puede usar 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
Entonces...
myoutput = open('somefile.txt', 'w')
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=myoutput)
Entonces puedes hacer lo que quieras con myoutput
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 encantadora y útil en la página del manual de python.
Si desea escribir la salida en un archivo, puede usar el argumento stdout de subprocess.call
.
Se necesita
None
(la salida estándar predeterminada se hereda del padre (su secuencia de comandos))subprocess.PIPE
(le permite pasar de un comando/proceso a otro)- un objeto de archivo o un descriptor de archivo (lo que desea, que la salida se escriba en un archivo)
Necesitas abrir un archivo con algo como open
y pase el objeto o 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 similar a un archivo válido funcionaría, como un socket (jadeo :)), pero nunca lo he intentado.
Como marcog menciona 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.