¿Cómo hacer “pulsar cualquier tecla” en python?

¿Cómo puedo hacer un “clic en cualquier tecla” (o tomar una opción del menú) en Python?

  • raw_input requiere que pulses return.
  • Windows msvcrt tiene getch () y getche ().

¿Hay una forma portátil de hacerlo usando las librerías estándar?

try: # Win32 from msvcrt import getch except ImportError: # UNIX def getch(): import sys, tty, termios fd = sys.stdin.fileno() old = termios.tcgetattr(fd) try: tty.setraw(fd) return sys.stdin.read(1) finally: termios.tcsetattr(fd, termios.TCSADRAIN, old) 
 try: os.system('pause') #windows, doesn't require enter except whatever_it_is: os.system('read -p "Press any key to continue"') #linux 

De los documentos de python :

 import termios, fcntl, sys, os fd = sys.stdin.fileno() oldterm = termios.tcgetattr(fd) newattr = termios.tcgetattr(fd) newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO termios.tcsetattr(fd, termios.TCSANOW, newattr) oldflags = fcntl.fcntl(fd, fcntl.F_GETFL) fcntl.fcntl(fd, fcntl.F_SETFL, oldflags | os.O_NONBLOCK) try: while 1: try: c = sys.stdin.read(1) print "Got character", `c` except IOError: pass finally: termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm) fcntl.fcntl(fd, fcntl.F_SETFL, oldflags) 

Sin embargo, esto solo funciona para las variantes de Unix. No creo que haya una plataforma multiplataforma.

Hace un par de años escribí una pequeña biblioteca para hacer esto de forma multiplataforma (inspirada directamente en la respuesta de John Millikin anterior). Además de getch , viene con una función de pause que imprime 'Press any key to continue . . .' 'Press any key to continue . . .' :

 pause() 

También puede proporcionar un mensaje personalizado:

 pause('Hit any key') 

Si el siguiente paso es salir, también viene con una función de conveniencia que llama sys.exit(status) :

 pause_exit(status=0, message='Hit any key') 

Instale con pip install py-getch , o vea esto aquí .

Lo implementé como el siguiente en Windows. getch() toma un solo carácter

 import msvcrt char = 0 print 'Press any key to continue' while not char: char = msvcrt.getch() 

en la plataforma Linux, uso os.system para llamar al os.system /sbin/getkey , por ejemplo

 continue_ = os.system('/sbin/getkey -m "Please any key within %d seconds to continue..." -c 10') if continue_: ... else: ... 

El beneficio es que mostrará una cuenta regresiva de segundos para el usuario, muy interesante 🙂