Keyboard RoutinesΒΆ
Capture keystrokes
#!/usr/bin/env python3
"""
Capture a single character of input without waiting for the user to
press enter
Exit on ctrl c, ctrl d, ctrl x or ctrl z
(OS is Linux
"""
import tty, sys, termios
class ReadChar():
        def __enter__(self):
                self.fd = sys.stdin.fileno()
                self.old_settings = termios.tcgetattr(self.fd)
                tty.setraw(sys.stdin.fileno())
                return sys.stdin.read(1)
        def __exit__(self, type, value, traceback):
                termios.tcsetattr(self.fd, termios.TCSADRAIN, self.old_settings)
def test():
        while True:
                with ReadChar() as rc:
                        char = rc
                if ord(char) <= 32:
                        print(f"You entered non printing character ordinal: {ord(char)}.")
                        # ctrl c, ctrl d, ctrl x or ctrl z will exit
                        if ord(char) in [3, 4, 24, 26]:
                                        sys.exit()
                else:
                                print(f"You entered character '{char}'.")
if __name__ == "__main__":
        test()