2012-03-03 21 views
9

leí todos los hilos que encontré en StackOverflow sobre cómo invocar comandos shell de Python usando subprocess, pero no pude encontrar una respuesta que se aplica a mi situación a continuación:tuberías de Shell con el subproceso en Python

me gustaría hacer lo siguiente de Python:

  1. Ejecute el comando de shell command_1. Recoger la salida en la variable result_1

  2. tubo de Shellresult_1 en command_2 y recoger la salida de result_2. En otras palabras, ejecutar command_1 | command_2usando el resultado que obtuve cuando se ejecuta command_1en el paso anterior

  3. Haga lo mismo tuberías result_1 en un tercer comando command_3 y recogiendo el resultado en result_3.

Hasta aquí he intentado:

p = subprocess.Popen(command_1, stdout=subprocess.PIPE, shell=True) 

result_1 = p.stdout.read(); 

p = subprocess.Popen("echo " + result_1 + ' | ' + 
command_2, stdout=subprocess.PIPE, shell=True) 

result_2 = p.stdout.read(); 

la razón parece ser que "echo " + result_1 no simula el proceso de obtención de la salida de un comando para la tubería.

¿Esto es posible con el subproceso? ¿Si es así, cómo?

+2

Consulte [este ejemplo en los documentos] (http://docs.python.org/library/subprocess.html#replacing-shell-pipeline) para conocer la forma correcta de hacerlo. –

+1

Gracias @SvenMarnach, ¿eso me permitiría recopilar la salida del primer comando en una variable de Python? –

Respuesta

8

que puede hacer:

pipe = Popen(command_2, shell=True, stdin=PIPE, stdout=PIPE) 
pipe.stdin.write(result_1) 
pipe.communicate() 

en lugar de la línea con la tubería.

+0

Esto se ve genial. ¿Cómo cambiaría lo anterior si quiero conectar 'result_1' * nuevamente * a otro comando? –

+1

En ese punto 'result_1' es una cadena. Debería poder repetir las mismas 3 líneas con el nuevo comando. –

Cuestiones relacionadas