español - subprocess python 3 example
¿Es posible comunicarse con un subproceso secundario con subproceso? ¿Pobre? (4)
Creo que deberías eliminar el sudo
en tu llamada a Popen
y pedirle al usuario de tu script que escriba sudo
.
Esto adicionalmente hace más explícita la necesidad de privilegios elevados en tu script, en lugar de esconderlo dentro de Popen
.
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 individualmente, que incluyen scripts csh y perl. Uno de estos scripts se ejecuta como:
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 respuestas. Por esto, pensé que el tradicional
(stdout, stderr) = proc.communicate(input=''y'')
trabajarí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?
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?
Necesitamos más información.
- ¿Sudo te está pidiendo una contraseña?
- ¿Qué tipo de interfaz tiene el script MOD para hacer preguntas?
Debido a que este tipo de cosas no se manejan de forma normal en la tubería.
Una solución para ambos podría ser Pexpect , que es bastante experto en el manejo de scripts divertidos que piden contraseñas, y varios otros problemas de entrada.
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'')