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

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


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

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

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

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

termios.tcgetattr(fd)

Возвращает список, содержащий атрибуты терминала для файлового дескриптора fd, в следующем виде: [iflag, oflag, cflag, lflag, ispeed, ospeed, cc], где cc – это список специальных символов терминала (каждый – строка длиной 1, за исключением элементов с индексами VMIN и VTIME, которые являются целыми числами, если эти поля определены). Интерпретация флагов и скоростей, а также индексация массива cc должны выполняться с помощью символьных констант, определённых в модуле termios.

termios.tcsetattr(fd, when, attributes)

Устанавливает атрибуты терминала для файлового дескриптора fd из списка attributes, аналогичного возвращаемому функцией tcgetattr(). Аргумент when определяет, когда должны быть изменены атрибуты:

termios.TCSANOW

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

termios.TCSADRAIN

Изменить атрибуты после передачи всего поставленного в очередь вывода.

termios.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 – возобновить ввод.

termios.tcgetwinsize(fd)

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

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

termios.tcsetwinsize(fd, winsize)

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

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

См. также

Модуль tty

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

ПримерExample

Ниже приведена функция, которая запрашивает пароль с отключённым эхом. Обратите внимание на технику с отдельным вызовом 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