termios
— POSIX 風格的 tty 控制¶
該模組為 tty I/O 控制提供了一個 POSIX 呼叫介面。有關這些呼叫的完整描述,請參閱termios(3) Unix 手冊頁。它僅適用於那些在安裝過程中配置為支援 POSIX *termios* 風格 tty I/O 控制的 Unix 版本。
可用性: Unix。
此模組中的所有函式都將檔案描述符 *fd* 作為其第一個引數。這可以是一個整數檔案描述符,例如由 sys.stdin.fileno()
返回的,或者是一個檔案物件,例如 sys.stdin
本身。
此模組還定義了使用此處提供的函式所需的所有常量;它們的名稱與其在 C 中的對應項相同。有關使用這些終端控制介面的更多資訊,請參閱您的系統文件。
該模組定義了以下函式
- termios.tcgetattr(fd)¶
返回一個列表,其中包含檔案描述符 *fd* 的 tty 屬性,如下所示:
[iflag, oflag, cflag, lflag, ispeed, ospeed, cc]
,其中 *cc* 是 tty 特殊字元的列表(每個字元都是長度為 1 的字串,除了索引為VMIN
和VTIME
的項,當這些欄位被定義時它們是整數)。必須使用termios
模組中定義的符號常量來完成對標誌和速度的解釋以及 *cc* 陣列中的索引。
- termios.tcsetattr(fd, when, attributes)¶
根據 *attributes* 設定檔案描述符 *fd* 的 tty 屬性,*attributes* 是一個類似於
tcgetattr()
返回的列表。 *when* 引數確定何時更改屬性- termios.TCSANOW¶
立即更改屬性。
- termios.TCSADRAIN¶
在傳輸所有排隊的輸出後更改屬性。
- termios.TCSAFLUSH¶
在傳輸所有排隊的輸出並丟棄所有排隊的輸入後更改屬性。
- termios.tcsendbreak(fd, duration)¶
在檔案描述符 *fd* 上傳送一箇中斷。 零 *duration* 傳送 0.25–0.5 秒的中斷;非零 *duration* 具有系統相關含義。
- termios.tcdrain(fd)¶
等待直到寫入檔案描述符 *fd* 的所有輸出都被傳輸。
- termios.tcflush(fd, queue)¶
丟棄檔案描述符 *fd* 上的排隊資料。 *queue* 選擇器指定哪個佇列:輸入佇列為
TCIFLUSH
,輸出佇列為TCOFLUSH
,或兩個佇列都為TCIOFLUSH
。
- termios.tcflow(fd, action)¶
暫停或恢復檔案描述符 *fd* 上的輸入或輸出。 *action* 引數可以是
TCOOFF
以暫停輸出,TCOON
以重新啟動輸出,TCIOFF
以暫停輸入,或TCION
以重新啟動輸入。
- termios.tcgetwinsize(fd)¶
返回一個元組
(ws_row, ws_col)
,其中包含檔案描述符 *fd* 的 tty 視窗大小。需要termios.TIOCGWINSZ
或termios.TIOCGSIZE
。在 3.11 版本中新增。
- termios.tcsetwinsize(fd, winsize)¶
根據 *winsize* 設定檔案描述符 *fd* 的 tty 視窗大小,*winsize* 是一個類似於
tcgetwinsize()
返回的包含兩項的元組(ws_row, ws_col)
。需要至少定義以下配對中的一個 (termios.TIOCGWINSZ
,termios.TIOCSWINSZ
); (termios.TIOCGSIZE
,termios.TIOCSSIZE
)。在 3.11 版本中新增。
另請參閱
- 模組
tty
用於常見終端控制操作的便捷函式。
示例¶
這是一個關閉回顯提示輸入密碼的函式。請注意使用單獨的 tcgetattr()
呼叫和 try
… finally
語句的技術,以確保無論發生什麼情況,舊的 tty 屬性都會完全恢復
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 # lflags
try:
termios.tcsetattr(fd, termios.TCSADRAIN, new)
passwd = input(prompt)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old)
return passwd