35.6. termios
- POSIX style tty control ¶
此模块为POSIX调用提供了一个接口,用于tty I / O控制。有关这些调用的完整说明,请参阅termios(2) Unix手册页。它仅适用于支持在安装期间配置的POSIX termios样式tty I / O控制的那些Unix版本。
该模块中的所有函数都接受一个文件描述器fd作为它们的第一个参数。这可以是整型文件描述器,例如由sys.stdin.fileno()
或file object返回,例如sys.stdin
此模块还定义了使用此处提供的函数所需的所有常量;这些名称与C中的对应名称相同。有关使用这些端子控制接口的更多信息,请参阅系统文档。
该模块定义了以下功能:
-
termios.
tcgetattr
(fd)¶ Return a list containing the tty attributes for file descriptor fd, as follows:
[iflag, oflag, cflag, lflag, ispeed, ospeed, cc]
where cc is a list of the tty special characters (each a string of length 1, except the items with indicesVMIN
andVTIME
, which are integers when these fields are defined). 必须使用termios
模块中定义的符号常量来解释标志和速度以及cc数组中的索引。
-
termios.
tcsetattr
(fd, when, attributes)¶ 从属性中设置文件描述器fd的tty属性,这是像
tcgetattr()
返回的列表。参数确定属性何时更改:TCSANOW
立即更改,TCSADRAIN
在传输所有排队输出后更改,或TCSAFLUSH
在发送所有排队的输出并丢弃所有排队的输入后进行更改。
-
termios.
tcsendbreak
(fd, duration)¶ 发送休息描述器fd。零持续时间发送0.25-0.5秒的中断;非零的持续时间具有系统相关含义。
-
termios.
tcdrain
(fd)¶ 等待直到所有写入文件描述器fd的输出被发送。
-
termios.
tcflush
(fd, queue)¶ 舍弃队列中的数据描述器fd。队列选择器指定输入队列的
TCIFLUSH
,输出队列的TCOFLUSH
,或TCIOFLUSH
两个队列。
-
termios.
tcflow
(fd, action)¶ 暂停或继续输入或输出到文件描述器fd。The action argument can be
TCOOFF
to suspend output,TCOON
to restart output,TCIOFF
to suspend input, orTCION
to restart input.
也可以看看
- 模块
tty
- 公共端控制操作的方便功能。
35.6.1. Example¶
这里有一个函数,提示输入密码,并关闭echo。请注意使用单独的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