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