> **Источник:** https://python-all.ru/3.1/library/termios.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# 33.6. `termios` – управление tty в стиле POSIX

*Платформы:* Unix

Этот модуль предоставляет интерфейс к вызовам POSIX для управления вводом/выводом tty. Для полного описания этих вызовов обратитесь к страницам руководства POSIX или Unix. Он доступен только на тех версиях Unix, которые поддерживают управление tty в стиле POSIX *termios* (и то только если был настроен при установке).

Все функции в этом модуле принимают файловый дескриптор *fd* в качестве первого аргумента. Это может быть целочисленный файловый дескриптор, например возвращаемый `sys.stdin.fileno()`, или [*файловый объект*](https://python-all.ru/3.1/glossary.html#term-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()`](https://python-all.ru/3.1/library/termios.html#termios.tcgetattr)

. Аргумент

*when*

определяет, когда будут изменены атрибуты:

`TCSANOW`

– немедленно,

`TCSADRAIN`

– после передачи всех поставленных в очередь выходных данных, или

`TCSAFLUSH`

– после передачи всех поставленных в очередь выходных данных и сброса всех поставленных в очередь входных данных.

#### `termios.tcsendbreak(fd, duration)`

Посылает сигнал break на файловый дескриптор

*fd*

. Нулевое значение

*duration*

посылает break длительностью 0,25–0,5 секунды; ненулевое

*duration*

имеет системно-зависимое значение.

#### `termios.tcdrain(fd)`

Ожидать, пока весь вывод, записанный в файловый дескриптор

*fd*

, не будет передан.

#### `termios.tcflush(fd, queue)`

Сбрасывает поставленные в очередь данные для файлового дескриптора

*fd*

. Селектор

*очередь*

указывает, какая очередь:

`TCIFLUSH`

– для входной очереди,

`TCOFLUSH`

– для выходной очереди, или

`TCIOFLUSH`

– для обеих очередей.

#### `termios.tcflow(fd, action)`

Приостанавливает или возобновляет ввод или вывод для файлового дескриптора

*fd*

. Аргумент

*action*

может быть

`TCOOFF`

для приостановки вывода,

`TCOON`

для возобновления вывода,

`TCIOFF`

для приостановки ввода или

`TCION`

для возобновления ввода.

> **См. также**
>
> **Модуль [`tty`](https://python-all.ru/3.1/library/tty.html#module-tty)**
>
> Вспомогательные функции для типовых операций управления терминалом.

## 33.6.1. Пример

Вот функция, которая запрашивает пароль с отключённым эхом. Обратите внимание на приём: используется отдельный вызов [`tcgetattr()`](https://python-all.ru/3.1/library/termios.html#termios.tcgetattr) и конструкция [`try`](https://python-all.ru/3.1/reference/compound_stmts.html#try) ... [`finally`](https://python-all.ru/3.1/reference/compound_stmts.html#finally), чтобы старые атрибуты tty были точно восстановлены независимо от того, что произойдёт:

```python
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          # локальные флаги
    try:
        termios.tcsetattr(fd, termios.TCSADRAIN, new)
        passwd = input(prompt)
    finally:
        termios.tcsetattr(fd, termios.TCSADRAIN, old)
    return passwd
```
