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.