Документация Python неофициальный перевод
Содержание страницы

33.6. termios – управление tty в стиле POSIXtermios – POSIX style tty control

Платформы: Unix

Этот модуль предоставляет интерфейс к вызовам POSIX для управления вводом/выводом tty. Для полного описания этих вызовов обратитесь к страницам руководства POSIX или Unix. Он доступен только на тех версиях Unix, которые поддерживают управление tty в стиле POSIX termios (и то только если был настроен при установке).

Все функции в этом модуле принимают файловый дескриптор fd в качестве первого аргумента. Это может быть целочисленный файловый дескриптор, например возвращаемый sys.stdin.fileno(), или файловый объект, например сам sys.stdin.

Этот модуль также определяет все константы, необходимые для работы с предоставленными функциями; их имена совпадают с соответствующими константами в C. За дополнительной информацией по использованию этих интерфейсов управления терминалом обратитесь к системной документации.

Модуль определяет следующие функции:

termios.tcgetattr(fd)
Возвращает список, содержащий атрибуты tty для файлового дескриптора fd, следующим образом: [iflag, oflag, cflag, lflag, ispeed, ospeed, cc], где cc – это список специальных символов tty (каждый – строка длиной 1, за исключением элементов с индексами VMIN и VTIME, которые являются целыми числами, если эти поля определены). Интерпретация флагов и скоростей, а также индексация в массиве cc должна выполняться с помощью символических констант, определённых в модуле termios.
termios.tcsetattr(fd, when, attributes)
Устанавливает атрибуты tty для файлового дескриптора fd из списка attributes, который имеет формат, возвращаемый функцией tcgetattr(). Аргумент when определяет, когда будут изменены атрибуты: TCSANOW – немедленно, TCSADRAIN – после передачи всех поставленных в очередь выходных данных, или TCSAFLUSH – после передачи всех поставленных в очередь выходных данных и сброса всех поставленных в очередь входных данных.
termios.tcsendbreak(fd, duration)
Посылает сигнал break на файловый дескриптор fd. Нулевое значение duration посылает break длительностью 0,25–0,5 секунды; ненулевое duration имеет системно-зависимое значение.
termios.tcdrain(fd)
Ожидать, пока весь вывод, записанный в файловый дескриптор fd, не будет передан.
termios.tcflush(fd, queue)
Сбрасывает поставленные в очередь данные для файлового дескриптора fd. Селектор очередь указывает, какая очередь: TCIFLUSH – для входной очереди, TCOFLUSH – для выходной очереди, или TCIOFLUSH – для обеих очередей.
termios.tcflow(fd, action)
Приостанавливает или возобновляет ввод или вывод для файлового дескриптора fd. Аргумент action может быть TCOOFF для приостановки вывода, TCOON для возобновления вывода, TCIOFF для приостановки ввода или TCION для возобновления ввода.

См. также

Модуль tty
Вспомогательные функции для типовых операций управления терминалом.

33.6.1. ПримерExample

Вот функция, которая запрашивает пароль с отключённым эхом. Обратите внимание на приём: используется отдельный вызов tcgetattr() и конструкция try ... finally, чтобы старые атрибуты tty были точно восстановлены независимо от того, что произойдёт:

def getpass(prompt="Password: "):
    import termios, sys
    fd = sys.stdin.fileno()
    old = termios.tcgetattr(fd)
    new = termios.tcgetattr(fd)
    new[3] = new[3] & ~termios.ECHO          # локальные флаги
    try:
        termios.tcsetattr(fd, termios.TCSADRAIN, new)
        passwd = input(prompt)
    finally:
        termios.tcsetattr(fd, termios.TCSADRAIN, old)
    return passwd