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


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

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

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

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

termios.tcgetattr(fd)?

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

termios.tcsetattr(fd, when, attributes)?

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

termios.tcsendbreak(fd, duration)?

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

termios.tcdrain(fd)?

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

termios.tcflush(fd, queue)?

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

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 新版功能.

參見(jiàn)

模塊 tty

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

示例?

這個(gè)函數(shù)可提示輸入密碼并且關(guān)閉回顯。 請(qǐng)注意其采取的技巧是使用一個(gè)單獨(dú)的 tcgetattr() 調(diào)用和一個(gè) try ... finally 語(yǔ)句來(lái)確保舊的 tty 屬性無(wú)論在何種情況下都會(huì)被原樣保存:

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