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


Этот модуль предоставляет интерфейс к вызовам POSIX для управления вводом/выводом tty. Полное описание этих вызовов можно найти на termios(3) страницу руководства Unix. Он доступен только для тех версий Unix, которые поддерживают управление вводом/выводом tty в стиле 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.

Added in version 3.11.

termios.tcsetwinsize(fd, winsize)

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

Added in version 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