Identificar cuándo el script de Python está esperando una entrada manual

Identificar cuándo el script de Python está esperando una entrada manual

Estoy escribiendo un script de Shell que ejecuta un script de Python. La secuencia de comandos de Python se detiene para que se proporcione una entrada manual. Sin embargo, no quiero tener que presionar Intro cada vez para acceder al script. En su lugar, quiero pasar la entrada manual desde el script de shell en ejecución.

¿Por favor ayuda, si hay una manera de hacerlo?

Respuesta1

Si solo se requiere una entrada, simplemente use echoy una tubería:

echo | python script.py

echoimprime una línea vacía (con nueva línea) en la salida estándar, y luego la redirigimos a la entrada del script Pythonusando|. Cuando Python lee una entrada estándar, obtendrá una línea vacía y continuará.

Si el script requiere más de una pulsación Intro, puede utilizar elyesdominioy una pipa:

yes "" | python script.py

El yescomando imprime la misma línea en la salida estándar una y otra vez para siempre. De forma predeterminada, la cadena es y, pero aquí la convertimos en una cadena vacía para que sean solo líneas nuevas para siempre.


Si se requiere ingresar como respuesta a un mensaje en particular, y en otras ocasiones necesita una entrada diferente, useexpect, que es "una extensión de Tcl que permite automatizar interacciones con programas interactivos".

Es posible escribir su script de shell para que lea la salida de Python y produzca nuevas entradas, pero no lo recomiendo especialmente. Si quieres hacer eso, miraRedirección de IO en la Guía avanzada de secuencias de comandos Bash: necesitarás clonar descriptores de archivos para hacerlo. También puedes usarmkfifoy cree archivos de canalización con nombre, luego léalos y escríbalos normalmente.

Para ser honesto, comenzaría a pensar en enfoques alternativos si está llegando al punto de utilizar cualquiera de estos enfoques: los scripts de shell simplemente no están diseñados para esto y será mucho más sencillo escribir su script, por ejemplo, Python mismo.

información relacionada