termios --- POSIX 風(fēng)格的 tty 控制?


此模塊提供了針對tty I/O 控制的 POSIX 調(diào)用的接口。 有關(guān)此類調(diào)用的完整描述,請參閱 termios(3) Unix 指南頁。 它僅在當(dāng)安裝時配置了支持 POSIX termios 風(fēng)格的 tty I/O 控制的 Unix 版本上可用。

此模塊中的所有函數(shù)均接受一個文件描述符 fd 作為第一個參數(shù)。 這可以是一個整數(shù)形式的文件描述符,例如 sys.stdin.fileno() 所返回的對象,或是一個 file object,例如 sys.stdin 本身。

這個模塊還定義了與此處所提供的函數(shù)一起使用的所有必要的常量;這些常量與它們在 C 中的對應(yīng)常量同名。 請參考你的系統(tǒng)文檔了解有關(guān)如何使用這些終端控制接口的更多信息。

這個模塊定義了以下函數(shù):

termios.tcgetattr(fd)?

對于文件描述符 fd 返回一個包含 tty 屬性的列表,形式如下: [iflag, oflag, cflag, lflag, ispeed, ospeed, cc],其中 cc 為一個包含 tty 特殊字符的列表(每一項都是長度為 1 的字符串,索引號為 VMINVTIME 的項除外,這些字段如有定義則應(yīng)為整數(shù))。 對旗標(biāo)和速度以及 cc 數(shù)組中索引的解讀必須使用在 termios 模塊中定義的符號常量來完成。

termios.tcsetattr(fd, when, attributes)?

根據(jù) attributes 列表設(shè)置文件描述符 fd 的 tty 屬性,該列表即 tcgetattr() 所返回的對象。 when 參數(shù)確定何時改變屬性: TCSANOW 表示立即改變,TCSADRAIN 表示在傳輸所有隊列輸出后再改變,或 TCSAFLUSH 表示在傳輸所有隊列輸出并丟失所有隊列輸入后再改變。

termios.tcsendbreak(fd, duration)?

在文件描述符 fd 上發(fā)送一個中斷。 duration 為零表示發(fā)送時長為 0.25--0.5 秒的中斷;duration 非零值的含義取決于具體系統(tǒng)。

termios.tcdrain(fd)?

進入等待狀態(tài)直到寫入文件描述符 fd 的所有輸出都傳送完畢。

termios.tcflush(fd, queue)?

在文件描述符 fd 上丟棄隊列數(shù)據(jù)。 queue 選擇器指定哪個隊列: TCIFLUSH 表示輸入隊列,TCOFLUSH 表示輸出隊列,或 TCIOFLUSH 表示兩個隊列同時。

termios.tcflow(fd, action)?

在文件描述符 fd 上掛起一戰(zhàn)恢復(fù)輸入或輸出。 action 參數(shù)可以為 TCOOFF 表示掛起輸出,TCOON 表示重啟輸出,TCIOFF 表示掛起輸入,或 TCION 表示重啟輸入。

termios.tcgetwinsize(fd)?

Return a tuple (ws_row, ws_col) containing the tty window size for file descriptor fd. Requires termios.TIOCGWINSZ or termios.TIOCGSIZE.

3.11 新版功能.

termios.tcsetwinsize(fd, winsize)?

Set the tty window size for file descriptor fd from winsize, which is a two-item tuple (ws_row, ws_col) like the one returned by tcgetwinsize(). Requires at least one of the pairs (termios.TIOCGWINSZ, termios.TIOCSWINSZ); (termios.TIOCGSIZE, termios.TIOCSSIZE) to be defined.

3.11 新版功能.

參見

模塊 tty

針對常用終端控制操作的便捷函數(shù)。

示例?

這個函數(shù)可提示輸入密碼并且關(guān)閉回顯。 請注意其采取的技巧是使用一個單獨的 tcgetattr() 調(diào)用和一個 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