Pipeando procesos en python
A veces uno quiere correr varios procesos en python y enchufar el standard output de un proceso con el stdin del siguiente. Esto sería equivalente a hacer en el shell:
$ prog1 param1 | prog2 param21 param22 | prog3
Para poder hacer algo así en python hice este método:
import subprocess
def pipe(*args):
last_proc = None
for command in args:
in_file = last_proc.stdout if last_proc else tempfile.TemporaryFile()
proc = subprocess.Popen(command, stdin=in_file, stdout=subprocess.PIPE)
if last_proc:
last_proc.stdout.close()
last_proc = proc
last_proc.communicate()
Para hacer lo mismo que el comando de arriba hay que hacer:
pipe(
("prog1", "param1"),
("prog2", "param21", "param22"),
("prog3",)
)
La única limitación es que no puedo procesar la salida de standard output del último proceso.
Happy hacking,
Aureliano.
No hay comentarios.:
Publicar un comentario