termios — Управление тити в стиле POSIX¶
Этот модуль предоставляет интерфейс к вызовам POSIX для управления вводом/выводом tty. Полное описание этих вызовов приведено на странице руководства по Unix termios(3). Он доступен только для тех версий Unix, которые поддерживают POSIX termios стиль управления вводом/выводом tty, настроенный во время установки.
Все функции этого модуля принимают в качестве первого аргумента дескриптор файла 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 определяет, когда будут изменены атрибуты:TCSANOWдля немедленного изменения,TCSADRAINдля изменения после передачи всей очереди вывода, или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для возобновления ввода.
См.также
- Модуль
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