termios — POSIX стиль управления tty


Модуль обеспечивает интерфейс для вызовов POSIX для управления tty I/O. Полное описание этих вызовов см. termios(3) странице руководства Unix. Он доступен только для версий Unix, поддерживающих управление POSIX termios стиль tty I/O, настроенное во время установки.

Все функции этого модуля принимают файловый дескриптор 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)

Отправить перерыв в файловый дескриптор fd. Нулевая duration посылает перерыв на 0,25–0,5 секунды; ненулевое duration имеет системно-зависимое значение.

termios.tcdrain(fd)

Дождаться передачи всех выходных данных, записанных в файл дескриптор fd.

termios.tcflush(fd, queue)

Удаление данных из очереди в файловом дескрипторе fd. Селектор queue указывает, какая очередь: TCIFLUSH для очереди ввода, TCOFLUSH для очереди вывода или TCIOFLUSH для обеих очередей.

termios.tcflow(fd, action)

Приостановка или возобновление ввода или вывода для файлового дескриптора fd. Аргумент action можно TCOOFF для приостановки вывода, TCOON для перезапуска вывода, TCIOFF для приостановки ввода или TCION для перезапуска ввода.

См.также

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

Пример

Далее представлена функция, которая запрашивает пароль с выключеным отражением. Обратите внимание на технику с помощью отдельной tcgetattr() вызова и tryfinally инструкция, чтобы старые атрибуты были восстановлены, независимо от того, что произойдет:

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          # lflags
    try:
        termios.tcsetattr(fd, termios.TCSADRAIN, new)
        passwd = input(prompt)
    finally:
        termios.tcsetattr(fd, termios.TCSADRAIN, old)
    return passwd