An elegant solution for reading a individual keypresses under Python.
import termios, sys, os def read_keys(): fd = sys.stdin.fileno() old = termios.tcgetattr(fd) new = termios.tcgetattr(fd) new[3] = new[3] & ~termios.ICANON & ~termios.ECHO new[6][termios.VMIN] = 1 new[6][termios.VTIME] = 0 termios.tcsetattr(fd, termios.TCSANOW, new) try: while 1: yield os.read(fd, 1) finally: termios.tcsetattr(fd, termios.TCSAFLUSH, old)
Example:
>>> for key in read_keys(): ... print("KEY: %s" % (key)) ... KEY: g KEY: i KEY: f KEY: d KEY: s KEY: w KEY: e
Inspired by this.