Lo que estoy tratando de hacer es ejecutar python en una ventana de terminal y redirigir su stdin desde una tubería con nombre. Luego escribo en la tubería con nombre en otra terminal y hago que ese comando se ejecute en python.
Terminal 1:
mkfifo p1
python < p1
Terminal 2:
echo -n "print \"Hello World\"" > p1
Lo que sucede es que Python imprime Hello Worldy sale. Lo que quiero hacer es mantener Python ejecutándose para tomar el siguiente comando. ¿Cómo hago esto en el shell?

exec 3> p1haciendo y qué es&3yexec 3> &1? Gracias.exec 3>&-funcionaría igual queexec 3>&1aquí?3>&-aquí.3>&1funcionaría bien pero tiene poco sentido. GraciasPuede usar
tail -fpara mantener abierto el fifo después deechoescribir en él.Por que esto funciona
pythonestá leyendo dep1. Cuando llega al final del archivo, deja de leer. Este es un comportamiento normal para las lecturas de archivos, incluso si el archivo es una tubería con nombre.tailcon el-findicador (seguir) se seguirá leyendo desde un archivo una vez que se llegue a su fin.fuente
echo "print \"Hello World\" " > p1en la segunda terminal y no pasó nada, pero la terminal tampoco estaba bloqueada. El terminal con Python permaneció bloqueado hasta que^clo cerré y salí y terminé Python con un mensaje de interrupción de teclado que Python muestra.tail -ftruco al descomprimir el archivo tar dividido en bloques a través de una tubería con nombre. Funcionó maravillosamente.Debe enviar todo el programa a la vez.
Cuando llama a ejecutar,
python < p1el shell está esperando la entrada antes de invocar python. Es decir, Python ni siquiera comienza a ejecutarse en absoluto hasta que el shell ha leído todo el flujo de datos y luego se lo pasa en su totalidad apython.Incluso si se ejecuta en su
python -u p1lugar (es decir, sin búfer y leído desde un archivop1)pythonintentará leer todo el archivo antes de ejecutarlo.Prueba este experimento.
Terminal 1:
Terminal 2:
Verá que puede enviar varias líneas, pero Python en el Término 1 no hace nada. Ahora presiona ctrl+ D. Todo el programa se ejecuta a la vez.
Entonces, para resumir, si desea que Python lea desde una tubería, debe enviar todo el programa. No puedes usar Python de manera interactiva de esta manera.
fuente
Quizás el enfoque de cola es mejor (más flexible) pero como alternativa:
fuente
-npodría haber sido eliminado. Y después de eso, 0. El terminal con elechocomando se bloquea 1. python no ejecuta el comando hasta que presiono^celechoterminal y ambos procesos finalizan.