Pregunta

Estoy tratando de escribir un script en python que contenga nuestro software. Este script necesita construir nuestro producto y empaquetarlo. Actualmente tenemos otros scripts que hacen cada pieza individualmente, que incluyen scripts csh y perl. Uno de estos scripts se ejecuta como:

sudo mod args

donde mod es un script de perl; así que 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 esta secuencia de comandos mod necesita algunas preguntas contestadas. Por esto pensé que lo tradicional

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

funcionaría. No creo que esté funcionando porque el proceso que controla Popen es sudo, no el script mod que hace la pregunta. ¿Hay alguna forma de comunicarse con el script mod y seguir ejecutándolo a través de sudo?

¿Fue útil?

Solución

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')

Otros consejos

Creo que deberías eliminar el sudo en tu llamada de Popen y pedirle al usuario de tu script que escriba sudo .

Esto además hace más explícita la necesidad de privilegios elevados en su script, en lugar de ocultarlo dentro de Popen .

Lo más sencillo sería ejecutar el script de control (el script de Python) a través de sudo . ¿Puedes hacerlo o no es una opción?

Necesitamos más información.

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

Debido a que este tipo de cosas no se manejan normalmente en la tubería.

Una solución para ambos podría ser Pexpect , que es bastante experto en el manejo divertido scripts que solicitan contraseñas y otros problemas de entrada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top