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

termios.md

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

1> **Источник:** https://python-all.ru/3.16/library/termios.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `termios` – управление терминалом в стиле POSIX89---1011Этот модуль предоставляет интерфейс к системным вызовам POSIX для управления вводом-выводом на терминале. Полное описание этих вызовов можно найти на странице руководства Unix *[termios(3)](https://python-all.ru/3.16/library/termios.html)*. Модуль доступен только в тех версиях Unix, которые поддерживают управление терминалом в стиле POSIX *termios*, настроенное при установке.1213[Доступность](https://python-all.ru/3.16/library/intro.html#availability): Unix.1415Все функции этого модуля принимают файловый дескриптор *fd* в качестве первого аргумента. Это может быть целочисленный файловый дескриптор, например, возвращаемый функцией `sys.stdin.fileno()`, или [файловый объект](https://python-all.ru/3.16/glossary.html#term-file-object), например, сам `sys.stdin`.1617Этот модуль также определяет все константы, необходимые для работы с предоставленными функциями; их имена совпадают с соответствующими константами в C. За дополнительной информацией по использованию этих интерфейсов управления терминалом обратитесь к системной документации.1819Модуль определяет следующие функции:2021#### `termios.tcgetattr(fd)`2223Возвращает список, содержащий атрибуты терминала для файлового дескриптора *fd*, в следующем виде: `[iflag, oflag, cflag, lflag, ispeed, ospeed, cc]`, где *cc* – это список специальных символов терминала (каждый – строка длиной 1, за исключением элементов с индексами `VMIN` и `VTIME`, которые являются целыми числами, если эти поля определены). Интерпретация флагов и скоростей, а также индексация массива *cc* должны выполняться с помощью символьных констант, определённых в модуле `termios`.2425#### `termios.tcsetattr(fd, when, attributes)`2627Устанавливает атрибуты терминала для файлового дескриптора *fd* из списка *attributes*, аналогичного возвращаемому функцией [`tcgetattr()`](https://python-all.ru/3.16/library/termios.html#termios.tcgetattr). Аргумент *when* определяет, когда должны быть изменены атрибуты:2829#### `termios.TCSANOW`3031Изменить атрибуты немедленно.3233#### `termios.TCSADRAIN`3435Изменить атрибуты после передачи всего поставленного в очередь вывода.3637#### `termios.TCSAFLUSH`3839Изменить атрибуты после передачи всего поставленного в очередь вывода и удаления всего поставленного в очередь ввода.4041#### `termios.tcsendbreak(fd, duration)`4243Отправить сигнал break на файловый дескриптор *fd*. Нулевое значение *duration* отправляет break на 0.25–0.5 секунды; ненулевое значение *duration* имеет смысл, зависящий от системы.4445#### `termios.tcdrain(fd)`4647Ожидать, пока весь вывод, записанный в файловый дескриптор *fd*, не будет передан.4849#### `termios.tcflush(fd, queue)`5051Отбрасывает поставленные в очередь данные на файловом дескрипторе *fd*. Селектор *очередь* указывает, какая очередь: `TCIFLUSH` – очередь ввода, `TCOFLUSH` – очередь вывода, или `TCIOFLUSH` – обе очереди.5253#### `termios.tcflow(fd, action)`5455Приостанавливает или возобновляет ввод или вывод на файловом дескрипторе *fd*. Аргумент *action* может принимать значения: `TCOOFF` – приостановить вывод, `TCOON` – возобновить вывод, `TCIOFF` – приостановить ввод, `TCION` – возобновить ввод.5657#### `termios.tcgetwinsize(fd)`5859Возвращает кортеж `(ws_row, ws_col)`, содержащий размер окна терминала для файлового дескриптора *fd*. Требует `termios.TIOCGWINSZ` или `termios.TIOCGSIZE`.6061Добавлено в версии 3.12.6263#### `termios.tcsetwinsize(fd, winsize)`6465Устанавливает размер окна терминала для файлового дескриптора *fd* из *winsize*, который представляет собой кортеж из двух элементов `(ws_row, ws_col)`, аналогичный возвращаемому функцией [`tcgetwinsize()`](https://python-all.ru/3.16/library/termios.html#termios.tcgetwinsize). Требуется определение хотя бы одной из пар (`termios.TIOCGWINSZ`, `termios.TIOCSWINSZ`); (`termios.TIOCGSIZE`, `termios.TIOCSSIZE`).6667Добавлено в версии 3.12.6869> **См. также**70>71> **Модуль [`tty`](https://python-all.ru/3.16/library/tty.html#module-tty)**72>73> Вспомогательные функции для типовых операций управления терминалом.7475## Пример7677Ниже приведена функция, которая запрашивает пароль с отключённым эхом. Обратите внимание на технику с отдельным вызовом [`tcgetattr()`](https://python-all.ru/3.16/library/termios.html#termios.tcgetattr) и инструкцией [`try`](https://python-all.ru/3.16/reference/compound_stmts.html#try) … [`finally`](https://python-all.ru/3.16/reference/compound_stmts.html#finally), чтобы гарантировать точное восстановление старых атрибутов терминала независимо от возникших ситуаций:7879```python80def getpass(prompt="Password: "):81    import termios, sys82    fd = sys.stdin.fileno()83    old = termios.tcgetattr(fd)84    new = termios.tcgetattr(fd)85    new[3] = new[3] & ~termios.ECHO          # lflags86    try:87        termios.tcsetattr(fd, termios.TCSADRAIN, new)88        passwd = input(prompt)89    finally:90        termios.tcsetattr(fd, termios.TCSADRAIN, old)91    return passwd92```93