tengo un guión que quiero correr desde el interior de pitón (2.6.5) que sigue la lógica continuación:Ejecución de un comando interactivo desde dentro pitón
- Solicitar al usuario la contraseña. Parece ("Ingresar contraseña:") (* Nota: La entrada no se refleja en la pantalla)
- Información irrelevante de salida
- Preguntar al usuario por la respuesta ("Blah Blah nombre_archivo.txt blah blah (S/N) ?:")
La última línea de aviso contiene texto que debo analizar (filename.txt). La respuesta proporcionada no importa (el programa en realidad podría salir de aquí sin proporcionar uno, siempre que puedo analizar la línea)
Mis requisitos son un poco similar a Wrapping an interactive command line application in a python script. Tal vez soy un poco grueso, pero las respuestas parecen un poco confusas, y el mío aún se cuelga incluso cuando el OP menciona que no es "para él".
Al mirar a su alrededor, he llegado a la conclusión de que el subproceso es la mejor manera de hacerlo, pero tengo algunos problemas. Popen línea está por debajo de
p = subprocess.Popen("cmd", shell=True, stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, stdin=subprocess.PIPE)
Cuando llamo una lectura() o readline() en la salida estándar, es el símbolo de la impresora para la pantalla y se cuelga.
Si llamo a una escritura ("contraseña \ n") para stdin, el aviso se escribe en la pantalla y se cuelga. El texto en write() no está escrito (el cursor no mueve una nueva línea).
Si llamo p.communicate ("contraseña \ n"), mismo comportamiento que el de escritura()
que estaba buscando algunas ideas aquí en la mejor forma de entrada a la entrada estándar y, posiblemente, cómo analizar la última línea de la salida si te sientes generoso, aunque probablemente podría resolverlo eventualmente. ¡Gracias!
Usted debe mirar pexpect: http://www.noah.org/wiki/pexpect –
creo que es necesario escribir en la salida estándar y leer de la entrada estándar ... no es el otherway alrededor como se pone por encima de –
@Joran jaja, sí, lo siento. A eso me refería. – user1521597