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