termios — Управление tty в стиле POSIX


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

Availability: Unix.

Все функции в этом модуле принимают файловый дескриптор fd в качестве первого аргумента. Это может быть целочисленный файловый дескриптор, например, возвращаемый sys.stdin.fileno(), или file object, например, сам 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 определяет, когда будут изменены атрибуты:

termios.TCSANOW

Немедленно измените атрибуты.

termios.TCSADRAIN

Измените атрибуты после передачи всех выходных данных, находящихся в очереди.

termios.TCSAFLUSH

Измените атрибуты после передачи всех выходных данных, находящихся в очереди, и удаления всех входных данных, находящихся в очереди.

termios.tcsendbreak(fd, duration)

Отправьте сообщение об остановке для файлового дескриптора fd. Значение нулевой продолжительности отправляет сообщение об остановке на 0,25-0,5 секунды; значение ненулевой продолжительности зависит от системы.

termios.tcdrain(fd)

Подождите, пока не будут переданы все выходные данные, записанные в файловый дескриптор fd.

termios.tcflush(fd, queue)

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

termios.tcflow(fd, action)

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

termios.tcgetwinsize(fd)

Возвращает кортеж (ws_row, ws_col), содержащий размер окна tty для файлового дескриптора fd. Требуется termios.TIOCGWINSZ или termios.TIOCGSIZE.

Добавлено в версии 3.11.

termios.tcsetwinsize(fd, winsize)

Установите размер окна tty для файлового дескриптора fd из winsize, который представляет собой кортеж из двух элементов (ws_row, ws_col), подобный кортежу, возвращаемому tcgetwinsize(). Требуется определить хотя бы одну из пар (termios.TIOCGWINSZ, termios.TIOCSWINSZ); (termios.TIOCGSIZE, termios.TIOCSSIZE).

Добавлено в версии 3.11.

См.также

Модуль tty

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

Пример

Вот функция, которая запрашивает пароль при отключенном эхо-сигнале. Обратите внимание на метод, использующий отдельный вызов tcgetattr() и инструкцию tryfinally, чтобы гарантировать, что старые атрибуты 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          # lflags
    try:
        termios.tcsetattr(fd, termios.TCSADRAIN, new)
        passwd = input(prompt)
    finally:
        termios.tcsetattr(fd, termios.TCSADRAIN, old)
    return passwd
Вернуться на верх