termios
--- POSIX 風(fēng)格的 tty 控制?
此模塊提供了針對tty I/O 控制的 POSIX 調(diào)用的接口。 有關(guān)此類調(diào)用的完整描述,請參閱 termios(3) Unix 指南頁。 它僅在當(dāng)安裝時(shí)配置了支持 POSIX termios 風(fēng)格的 tty I/O 控制的 Unix 版本上可用。
此模塊中的所有函數(shù)均接受一個(gè)文件描述符 fd 作為第一個(gè)參數(shù)。 這可以是一個(gè)整數(shù)形式的文件描述符,例如 sys.stdin.fileno()
所返回的對象,或是一個(gè) file object,例如 sys.stdin
本身。
這個(gè)模塊還定義了與此處所提供的函數(shù)一起使用的所有必要的常量;這些常量與它們在 C 中的對應(yīng)常量同名。 請參考你的系統(tǒng)文檔了解有關(guān)如何使用這些終端控制接口的更多信息。
這個(gè)模塊定義了以下函數(shù):
- termios.tcgetattr(fd)?
對于文件描述符 fd 返回一個(gè)包含 tty 屬性的列表,形式如下:
[iflag, oflag, cflag, lflag, ispeed, ospeed, cc]
,其中 cc 為一個(gè)包含 tty 特殊字符的列表(每一項(xiàng)都是長度為 1 的字符串,索引號為VMIN
和VTIME
的項(xiàng)除外,這些字段如有定義則應(yīng)為整數(shù))。 對旗標(biāo)和速度以及 cc 數(shù)組中索引的解讀必須使用在termios
模塊中定義的符號常量來完成。
- termios.tcsetattr(fd, when, attributes)?
根據(jù) attributes 列表設(shè)置文件描述符 fd 的 tty 屬性,該列表即
tcgetattr()
所返回的對象。 when 參數(shù)確定何時(shí)改變屬性:TCSANOW
表示立即改變,TCSADRAIN
表示在傳輸所有隊(duì)列輸出后再改變,或TCSAFLUSH
表示在傳輸所有隊(duì)列輸出并丟失所有隊(duì)列輸入后再改變。
- termios.tcsendbreak(fd, duration)?
在文件描述符 fd 上發(fā)送一個(gè)中斷。 duration 為零表示發(fā)送時(shí)長為 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. Requirestermios.TIOCGWINSZ
ortermios.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 bytcgetwinsize()
. Requires at least one of the pairs (termios.TIOCGWINSZ
,termios.TIOCSWINSZ
); (termios.TIOCGSIZE
,termios.TIOCSSIZE
) to be defined.3.11 新版功能.
參見
- 模塊
tty
針對常用終端控制操作的便捷函數(shù)。
示例?
這個(gè)函數(shù)可提示輸入密碼并且關(guān)閉回顯。 請注意其采取的技巧是使用一個(gè)單獨(dú)的 tcgetattr()
調(diào)用和一個(gè) 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