@contextmanager
def cbreak():
    old_attrs = termios.tcgetattr(sys.stdin)
tty.setcbreak(sys.stdin)
try:
    yield
finally:
    termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_attrs)
Python, «фильтрованное» редактирование строк, чтение стандартного ввода с помощью char без эха