¿Cómo puedo leer la entrada del teclado en Python?

Tengo problemas con la entrada del teclado en Python. Intenté raw_input y se llama solo una vez. Pero quiero leer la entrada del teclado cada vez que el usuario presiona cualquier tecla. ¿Cómo puedo hacerlo? Gracias por las respuestas.

Entonces, por ejemplo, tienes un código de Python como este:

file1.py

 #!/bin/python ... do some stuff... 

Y en un cierto punto del documento que desea comprobar siempre para la entrada:

 while True: input = raw_input(">>>") ... do something with the input... 

Eso siempre esperará la entrada. Puede enlazar ese bucle infinito como un proceso separado y hacer otras cosas mientras tanto, para que la entrada del usuario pueda tener un efecto en las tareas que está realizando.

Si, en cambio, desea solicitar una entrada SOLO cuando se presiona una tecla y hacer eso como un bucle, con este código (tomado de esta receta de ActiveState por Steven D’Aprano ) puede esperar a que se presione la tecla y luego preguntar para una entrada, ejecute una tarea y regrese al estado anterior.

 import sys try: import tty, termios except ImportError: # Probably Windows. try: import msvcrt except ImportError: # FIXME what to do on other platforms? # Just give up here. raise ImportError('getch not available') else: getch = msvcrt.getch else: def getch(): """getch() -> key character Read a single keypress from stdin and return the resulting character. Nothing is echoed to the console. This call will block if a keypress is not already available, but will not wait for Enter to be pressed. If the pressed key was a modifier key, nothing will be detected; if it were a special function key, it may return the first character of of an escape sequence, leaving additional characters in the buffer. """ fd = sys.stdin.fileno() old_settings = termios.tcgetattr(fd) try: tty.setraw(fd) ch = sys.stdin.read(1) finally: termios.tcsetattr(fd, termios.TCSADRAIN, old_settings) return ch 

Entonces, ¿cómo lidiar con esto? Bueno, ahora solo llame a getch() cada vez que desee esperar a que se presione una tecla. Así como esto:

 while True: getch() # this also returns the key pressed, if you want to store it input = raw_input("Enter input") do_whatever_with_it 

También puedes enlazar eso y hacer otras tareas mientras tanto.

Recuerde que Python 3.x ya no usa raw_input, sino que simplemente ingresa ().

En python2.x, simplemente use un bucle while infinito con break condicional:

 In [11]: while True: ...: k = raw_input('> ') ...: if k == 'q': ...: break; ...: #do-something > test > q In [12]: