The following script shows how single keystrokes are read in a non-blocking mode.
#!/usr/bin/env python import sys, termios import __builtin__ def inkey(): if not 'inkeyInit' in __builtin__.__dict__: __builtin__.__dict__['inkeyInit'] = 1 fd = sys.stdin.fileno() old = termios.tcgetattr( fd) new = termios.tcgetattr( fd) new[3] = new[3] & ~termios.ICANON & ~termios.ECHO # # VMIN specifies the minimum number of characters to be read # new[6] [termios.VMIN] = 0 # # VTIME specifies how long the driver waits for VMIN characters. # the unit of VTIME is 0.1 s. # new[6] [termios.VTIME] = 1 termios.tcsetattr( fd, termios.TCSADRAIN, new) sys.exitfunc = lambda: termios.tcsetattr( fd, termios.TCSADRAIN, old) key = sys.stdin.read(1) if( len( key) == 0): key = -1 else: key = ord( key) return key def main(): print( "Press some keys, 'x' terminates") while True: key = inkey() if( key == ord( 'x')): break if( key != -1): print( key) print( "Bye") if __name__ == "__main__": main()