sys.stdin.readlines () bloquea el script de Python

Cada vez que estoy ejecutando mi script de Python, parece que se cuelga en esta línea:

lines = sys.stdin.readlines() 

¿Qué debo hacer para solucionar / evitar esto?

EDITAR

Esto es lo que estoy haciendo con lines :

 lines = sys.stdin.readlines() updates = [line.split() for line in lines] 

Editar 2

Estoy ejecutando este script desde un gancho de git, ¿hay alguna forma alrededor del EOF?

Esto depende mucho de lo que está tratando de lograr. Usted podría ser capaz de hacer:

 for line in sys.stdin: #do something with line 

Por supuesto, con este lenguaje, así como con el método readlines() que está utilizando, debe enviar de alguna manera el carácter EOF a su script para que sepa que el archivo está listo para leer. (En Unix, Ctrl-D normalmente hace el truco).

A menos que esté redirigiendo algo a un stdin ese sería el comportamiento esperado. Eso dice leer la entrada de entrada stdin (que sería la consola desde la que está ejecutando el script). Está esperando su entrada.

Consulte: “¿Cómo finalizar la entrada de sys.stdin.readlines() ?

Si está ejecutando el progtwig en una sesión interactiva, esta línea hace que Python lea desde una entrada estándar (es decir, su teclado) hasta que envíe el carácter EOF ( CtrlD (Unix / Mac) o CtrlZ (Windows)) .

 >>> import sys >>> a = sys.stdin.readlines() Test Test2 ^Z >>> a ['Test\n', 'Test2\n'] 

Sé que esto no está respondiendo directamente a su pregunta, ya que otros ya han abordado el problema de EOF, pero lo que encontré que funciona mejor cuando se lee la salida en vivo de un subproceso de larga duración o stdin es el enfoque de línea while / if:

 while True: line = sys.stdin.readline() if not line: break process(line) 

En este caso, sys.stdin.readline () devolverá líneas de texto antes de que se devuelva un EOF. Una vez que se haya dado el EOF, se devolverá la línea vacía que activa la ruptura del bucle. Un locking todavía puede ocurrir aquí, siempre y cuando no se proporcione un EOF.

Vale la pena señalar que la capacidad de procesar la “salida en vivo”, mientras el subproceso / stdin todavía se está ejecutando, requiere que la aplicación de escritura descargue su salida.