# `tty` --- 终端控制函数

Source code: Lib/tty.py

`tty` 模块定义了将 tty 放入 cbreak 和 raw 模式的函数。

Availability: Unix.

因为它需要 `termios` 模块，所以只能在 Unix 上运行。

`tty` 模块定义了以下函数：

tty.cfmakeraw(mode)

  操作 tty 属性列表 mode，它是一个与 `termios.tcgetattr()` 的返回值类似的列表，将其转换为原始模式 tty 的属性列表。

  Added in version 3.12.

tty.cfmakecbreak(mode)

  操作 tty 属性列表 mode，它是一个与 `termios.tcgetattr()` 的返回值类似的列表，将其转换为 cbreak 模式的 tty 的属性列表。

  这将清除 mode 中的 `ECHO` 和 `ICANON` 本地模式旗标并将最小输入设为 1 字节且无延迟。

  Added in version 3.12.

  在 3.12.2 版本发生变更: `ICRNL` 旗标将不再被清除。 这与 Linux 和 macOS 的 `stty cbreak` 行为以及 `setcbreak()` 在历史上所做的相匹配。

tty.setraw(fd, when=termios.TCSAFLUSH)

  将文件描述符 fd 的模式改为 raw。 如果 when 被省略，它将默认为 `termios.TCSAFLUSH`，并将被传给 `termios.tcsetattr()`。 `termios.tcgetattr()` 的返回值在将 fd 设为 raw 模式前会被保存；该值将被返回。

  在 3.12 版本发生变更: 现在返回值就是原本的 tty 属性，而不是 `None`。

tty.setcbreak(fd, when=termios.TCSAFLUSH)

  将文件描述符 fd 的模式改为 cbreak。 如果 when 被省略，它将默认为 `termios.TCSAFLUSH`，并将被传给 `termios.tcsetattr()`。 `termios.tcgetattr()` 的返回值在将 fd 设为 cbreak 模式前会被保存；该值将被返回。

  这将清除 `ECHO` 和 `ICANON` 本地模式旗标并将最小输入设为 1 字节且无延迟。

  在 3.12 版本发生变更: 现在返回值就是原本的 tty 属性，而不是 `None`。

  在 3.12.2 版本发生变更: `ICRNL` 旗标将不再被清除。 这恢复了 Python 3.11 及更早版本的行为并与 Linux, macOS 和BSD 在它们的 `stty(1)` 指南页对于 cbreak 模式的描述相匹配。

参见

模块 `termios`

  低级终端控制接口。