![Identificar cuándo el script de Python está esperando una entrada manual](https://rvso.com/image/38672/Identificar%20cu%C3%A1ndo%20el%20script%20de%20Python%20est%C3%A1%20esperando%20una%20entrada%20manual.png)
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 echo
y una tubería:
echo | python script.py
echo
imprime 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 elyes
dominioy una pipa:
yes "" | python script.py
El yes
comando 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 usarmkfifo
y 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.