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

termios.md

67 строк · 6.6 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.2/library/termios.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 33.6. [`termios`](https://python-all.ru/3.2/library/termios.html#module-termios) – управление tty в стиле POSIX89*Платформы:* Unix1011Этот модуль предоставляет интерфейс к вызовам POSIX для управления вводом/выводом tty. Для полного описания этих вызовов обратитесь к страницам руководства POSIX или Unix. Он доступен только на тех версиях Unix, которые поддерживают управление tty в стиле POSIX *termios* (и то только если был настроен при установке).1213Все функции в этом модуле принимают файловый дескриптор *fd* в качестве первого аргумента. Это может быть целочисленный файловый дескриптор, например возвращаемый `sys.stdin.fileno()`, или [*файловый объект*](https://python-all.ru/3.2/glossary.html#term-file-object), например сам `sys.stdin`.1415Этот модуль также определяет все константы, необходимые для работы с предоставленными функциями; их имена совпадают с соответствующими константами в C. За дополнительной информацией по использованию этих интерфейсов управления терминалом обратитесь к системной документации.1617Модуль определяет следующие функции:1819#### `termios.tcgetattr(fd)`2021Возвращает список с атрибутами tty для файлового дескриптора *fd*, в следующем виде: `[iflag, oflag, cflag, lflag, ispeed, ospeed, cc]`, где *cc* – это список специальных символов tty (каждый – строка длины 1, кроме элементов с индексами `VMIN` и `VTIME`, которые являются целыми числами, если эти поля определены). Интерпретация флагов и скоростей, а также индексация в массиве *cc* должны выполняться с помощью символических констант, определённых в модуле [`termios`](https://python-all.ru/3.2/library/termios.html#module-termios).2223#### `termios.tcsetattr(fd, when, attributes)`2425Устанавливает атрибуты tty для файлового дескриптора *fd* из списка *attributes*, который имеет формат, возвращаемый функцией [`tcgetattr()`](https://python-all.ru/3.2/library/termios.html#termios.tcgetattr). Аргумент *when* определяет, когда будут изменены атрибуты: `TCSANOW` – немедленно, `TCSADRAIN` – после передачи всех поставленных в очередь выходных данных, или `TCSAFLUSH` – после передачи всех поставленных в очередь выходных данных и сброса всех поставленных в очередь входных данных.2627#### `termios.tcsendbreak(fd, duration)`2829Посылает сигнал break на файловый дескриптор *fd*. Нулевое значение *duration* посылает break длительностью 0,25–0,5 секунды; ненулевое *duration* имеет системно-зависимое значение.3031#### `termios.tcdrain(fd)`3233Ожидать, пока весь вывод, записанный в файловый дескриптор *fd*, не будет передан.3435#### `termios.tcflush(fd, queue)`3637Сбрасывает поставленные в очередь данные для файлового дескриптора *fd*. Селектор *очередь* указывает, какая очередь: `TCIFLUSH` – для входной очереди, `TCOFLUSH` – для выходной очереди, или `TCIOFLUSH` – для обеих очередей.3839#### `termios.tcflow(fd, action)`4041Приостанавливает или возобновляет ввод или вывод для файлового дескриптора *fd*. Аргумент *action* может быть `TCOOFF` для приостановки вывода, `TCOON` для возобновления вывода, `TCIOFF` для приостановки ввода или `TCION` для возобновления ввода.4243> **См. также**44>45> **Модуль [`tty`](https://python-all.ru/3.2/library/tty.html#module-tty)**46>47> Вспомогательные функции для типовых операций управления терминалом.4849## 33.6.1. Пример5051Вот функция, которая запрашивает пароль с отключённым эхом. Обратите внимание на приём: используется отдельный вызов [`tcgetattr()`](https://python-all.ru/3.2/library/termios.html#termios.tcgetattr) и конструкция [`try`](https://python-all.ru/3.2/reference/compound_stmts.html#try) ... [`finally`](https://python-all.ru/3.2/reference/compound_stmts.html#finally), чтобы старые атрибуты tty были точно восстановлены независимо от того, что произойдёт:5253```python54def getpass(prompt="Password: "):55    import termios, sys56    fd = sys.stdin.fileno()57    old = termios.tcgetattr(fd)58    new = termios.tcgetattr(fd)59    new[3] = new[3] & ~termios.ECHO          # локальные флаги60    try:61        termios.tcsetattr(fd, termios.TCSADRAIN, new)62        passwd = input(prompt)63    finally:64        termios.tcsetattr(fd, termios.TCSADRAIN, old)65    return passwd66```67