Содержание страницы
35.6. termios – управление tty в стиле POSIX¶termios – POSIX style tty control
Этот модуль предоставляет интерфейс к вызовам 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
- Вспомогательные функции для типовых операций управления терминалом.
35.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