Python obtener las teclas de flecha de la línea de comandos

Tengo un script que debe interactuar con la entrada de los usuarios (presionando las teclas de flecha), pero no puedo obtener las teclas. Intenté raw_input y algunas otras funciones, pero no funcionaron. este es mi código de muestra, cómo debería ser (ejecutar bool se puede establecer en Falso en otra función)

running = True while running: #if input == Arrow_UP: # do_Sth #elif ... display() time.sleep(1) 

otra pregunta es, ¿cómo puedo llamar a la función de visualización solo una vez por segundo, pero reactjsr en la entrada inmediatamente?

Hay diferentes situaciones:

  • Si usa una interfaz gráfica como TKinter o PyGame , puede vincular un evento a la tecla de flecha y esperar a que suceda .

    Ejemplo en Tkinter tomado de esta respuesta :

     from Tkinter import * main = Tk() def leftKey(event): print "Left key pressed" def rightKey(event): print "Right key pressed" frame = Frame(main, width=100, height=100) main.bind('', leftKey) main.bind('', rightKey) frame.pack() main.mainloop() 
  • Si su aplicación permanece en el terminal, considere usar curses como se describe en esta respuesta

    Curses está diseñado para crear interfaces que se ejecutan en el terminal (bajo linux).

  • Si utiliza curses, el contenido del terminal se borrará cuando ingrese a la aplicación y se restaurará cuando salga de él. Si no desea este comportamiento, puede usar un contenedor getch (), como se describe en esta respuesta . Una vez que haya inicializado getch con getch = _Getch() , puede almacenar la siguiente entrada con la key = getch()

En cuanto a cómo llamar a display () cada segundo, nuevamente depende de la situación, pero si trabaja en un solo proceso en un terminal, el proceso no podrá llamar a su función display () mientras espera una entrada . La solución es usar un hilo diferente para la función display (), como en

 import threading; def display (): threading.Timer(1., display).start (); print "display" display () 

Aquí se display horarios de un segundo en el futuro cada vez que se llama. Por supuesto, puede poner algunas condiciones alrededor de esta llamada para que el proceso se detenga cuando se cumplan algunas condiciones, en su caso cuando se haya dado una entrada. Consulte esta respuesta para una discusión más detallada.