# `tty` --- 終端機控制函式

原始碼：Lib/tty.py

`tty` 模組定義了將 tty 放入 cbreak 和 raw 模式的函式。

可用性: Unix.

因為它需要 `termios` 模組，所以只能在 Unix 上執行。

`tty` 模組定義了以下函式：

tty.cfmakeraw(mode)

  將 tty 屬性串列 mode 轉換成原始模式下的 tty 屬性串列，這個串列就像 `termios.tcgetattr()` 所回傳的一樣。

  在 3.12 版被加入.

tty.cfmakecbreak(mode)

  將 tty 屬性串列 mode 轉換成 cbreak 模式下的 tty 屬性串列，這個串列就像 `termios.tcgetattr()` 所回傳的一樣。

  這會清除 mode 中的 `ECHO` 和 `ICANON` 本地模式旗標，並將最小輸入設定為 1 位元組，且無延遲。

  在 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 模式為 raw 之前先儲存起來。此函式回傳這個值。

  這會清除 `ECHO` 和 `ICANON` 本地模式旗標，並將最小輸入設定為 1 位元組，且無延遲。

  在 3.12 版的變更: 現在的回傳值為原本的 tty 屬性，而不是 `None`。

  在 3.12.2 版的變更: 不再清除 `ICRNL` 旗標。這恢復了 Python 3.11 及更早版本的行為，也符合 Linux、macOS 及 BSD 在他們的 `stty(1)` man 頁面中描述的 cbreak 模式。

也參考

`termios` 模組

  低階終端機控制介面。