GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo canalizo una llamada de subproceso a un archivo de texto?

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.


Linux
  1. Cómo agregar texto al final del archivo en Linux

  2. ¿Cómo mover una línea en un archivo de texto hacia arriba o hacia abajo una línea?

  3. ¿Cómo elimino líneas nuevas de un archivo de texto?

  4. ¿Cómo agrego texto a un archivo?

  5. Cómo abrir un archivo en vim usando pipe

Cómo comparar y fusionar archivos de texto en Linux

Cómo crear directorios desde un archivo de texto en Linux

Cómo guardar la salida del comando de Linux en una imagen o un archivo de texto

Cómo bloquear un archivo de texto en Linux usando el comando flock

Cómo imprimir líneas duplicadas en un archivo de texto en Linux

Cómo agregar texto al comienzo del archivo en Linux