2011-04-05 18 views
19

Esto podría ser una pregunta tonta, pero como no puedo encontrar una respuesta, tengo que preguntarlo.¿Cómo finalizar la entrada de sys.stdin.readlines()?

en Python interactiva Quiero procesar un mensaje, que me sale con:

>>> message = sys.stdin.readlines() 

Todo funciona bien, pero ... ¿para que deje de conseguir una entrada y hacerla guardar en la variable mensaje? Detenerse con ctrl + c detiene todo el proceso, por lo que no hay entradas para guardar en ningún lado. Supongo que hay una respuesta fácil que simplemente no puedo encontrar ...

Respuesta

38

Para sistema basado en UNIX:

Hola, se puede amarrar: Ctrld

Ctrld cierra la entrada estándar (stdin) mediante el envío de EOF .

Ejemplo:

>>> import sys 
>>> message = sys.stdin.readlines() 
Hello 
World 
My 
Name 
Is 
James 
Bond 
# <ctrl-d> EOF sent 
>>> print message 
['Hello\n', 'World\n', 'My\n', 'Name\n', 'Is\n', 'James\n', 'Bond\n'] 

Para Windows:

Para enviar EOF en Windows, puede reemplazar Ctrld por Ctrlz

+0

Muchas gracias, exactamente lo que estaba buscando. Como ambos respondieron al mismo tiempo, votaré las dos respuestas. – Gandi

+0

De nada. –

4

Use CTRL-D.

message = sys.stdin.readlines() 
abc 
def 
<CTRL-D> 

# message == ['abc\n', 'def\n'] 
4

Esto es una vieja pregunta pero necesita una actualización acerca de Windows y diferentes diseños de teclado.

Si ninguno CTRL + Z ni CTRL + D ** trabajo por usted en Windows y y que está vagando lo que está pasando ello:

  • de verificación si está utilizando configuración predeterminada del teclado en inglés
  • si tiene un diseño de teclado diferente, no predeterminado, intente cambiar la configuración del teclado al inglés en la barra de idioma, luego intente presionando ctrl + z después de los cambios
  • si todavía está confundido, mire la pantalla, lo que aparece en la línea de comando cuando presiona ctrl + z. ¿Qué símbolo ves? Cuando estaba presionando ctrl + z, estaba viendo esto:^Y, y cuando por error presioné ctrl + y He visto esto^Z, presioné enter y se tomó la entrada, se envió EOF.

Esto es algo extraño y contradictorio. Cambié el diseño de las teclas hace algún tiempo para incluir caracteres polacos, pero todas las teclas comunes no se modifican, z se asigna a z cuando uso el teclado normalmente, normalmente ctrl + z no hace nada en el teclado, por lo que no debería cambiarme . Pero aparentemente en cmd funciona de manera diferente, para tener un enlace predeterminado entre ctrl yz tengo que cambiar al diseño predeterminado, o usar control y para enviar EOF.

+0

Santa mierda, me salvaste. No tenía idea de qué estaba haciendo mal y finalmente encontré tu respuesta en la que dices "presioné enter" y de repente supe lo que estaba haciendo mal. ¡Gracias! – snowe

1

En windows simplemente haga CTRL + Z y presione enter

Cuestiones relacionadas