2008-10-30 9 views
5

Estoy tratando de escribir un script de python que empaquete nuestro software. Este script necesita construir nuestro producto y empaquetarlo. Actualmente tenemos otros scripts que hacen cada pieza de forma individual, que incluye scripts csh y perl. Una secuencia de comandos se ejecuta como:¿Es posible comunicarse con un subproceso secundario con subproceso.Popen?

sudo mod args 

donde mod es una secuencia de comandos perl; entonces en Python lo haría

proc = Popen(['sudo', 'mod', '-p', '-c', 'noresource', '-u', 'dtt', '-Q'], stderr=PIPE, stdout=PIPE, stdin=PIPE) 

El problema es que este script MOD necesita algunas preguntas respondidas. Para esto, pensé que el tradicional

(stdout, stderr) = proc.communicate(input='y') 

funcionaría. No creo que esté funcionando porque el proceso que Popen está controlando es sudo, no el script mod que está haciendo la pregunta. ¿Hay alguna forma de comunicarse con el script mod y aún así ejecutarlo a través de sudo?

Respuesta

4

Yo elegiría ir con Pexpect.

import pexpect 
child = pexpect.spawn ('sudo mod -p -c noresource -u dtt -Q') 
child.expect ('First question:') 
child.sendline ('Y') 
child.expect ('Second question:') 
child.sendline ('Yup') 
+0

Probé pexpect y funcionó como "esperado". ¡Gracias! – darrickc

1

Lo más simple sería ejecutar el script de control (el script de Python) a través de sudo. ¿Eres capaz de hacer eso o no es una opción?

3

Creo que deberías quitar el sudo en su llamada Popen y requieren que el usuario de la secuencia de comandos para escribir sudo.

Esto también hace más explícita la necesidad de privilegios elevados en su secuencia de comandos, en lugar de ocultarlo dentro de Popen.

0

Necesitamos más información.

  1. ¿Sudo le está pidiendo una contraseña?
  2. ¿Qué tipo de interfaz tiene el script mod para hacer preguntas?

Porque este tipo de cosas no se manejan de manera normal sobre la tubería.

Una solución para estos dos podría ser Pexpect, que es bastante experta en el manejo de scripts divertidos que piden contraseñas, y varios otros problemas de entrada.

Cuestiones relacionadas