On this page
36.7. termios — POSIX 样式 tty 控件
该模块为 tty I/O 控制提供了 POSIX 调用的接口。有关这些调用的完整说明,请参见* termios(2)* Unix 手册页。它仅适用于支持在安装过程中配置的 POSIX * termios *样式 tty I/O 控制的 Unix 版本。
该模块中的所有函数都将文件 Descriptors* fd *作为其第一个参数。这可以是整数文件 Descriptors,例如sys.stdin.fileno()
返回,也可以是文件对象,例如sys.stdin
本身。
该模块还定义了使用此处提供的Function所需的所有常量。它们与 C 中的名称相同。有关使用这些终端控制接口的更多信息,请参考系统文档。
该模块定义了以下Function:
termios.
tcgetattr
(* fd *)- 返回包含文件 Descriptors* fd 的 tty 属性的列表,如下所示:
[iflag, oflag, cflag, lflag, ispeed, ospeed, cc]
其中 cc 是 tty 特殊字符的列表(每个字符串的长度为 1,但索引为VMIN
和VTIME
的项为整数)这些字段定义时)。标志和速度的解释以及 cc *数组中的索引必须使用termios模块中定义的符号常量来完成。
- 返回包含文件 Descriptors* fd 的 tty 属性的列表,如下所示:
termios.
tcsetattr
(* fd , when , attributes *)- 从* attributes 设置文件 Descriptors fd *的 tty 属性,该列表类似于tcgetattr()返回的列表。 * when *参数确定何时更改属性:
TCSANOW
立即更改,TCSADRAIN
在传输所有排队的输出后更改,TCSAFLUSH
在传输所有排队的输出并丢弃所有排队的 Importing 后更改。
- 从* attributes 设置文件 Descriptors fd *的 tty 属性,该列表类似于tcgetattr()返回的列表。 * when *参数确定何时更改属性:
termios.
tcsendbreak
(* fd , duration *)- 发送文件 Descriptors* fd *的break。持续时间为零,会发出 0.25 –0.5 秒的间隔;非零持续时间具有与系统有关的含义。
termios.
tcdrain
(* fd *)- await 直到写入文件 Descriptors* fd *的所有输出都已传输。
termios.
tcflush
(* fd , queue *)- 丢弃文件 Descriptors* fd *上的排队数据。 * queue *selectors 指定哪个队列:
TCIFLUSH
表示 Importing 队列,TCOFLUSH
表示输出队列,或TCIOFLUSH
表示两个队列。
- 丢弃文件 Descriptors* fd *上的排队数据。 * queue *selectors 指定哪个队列:
termios.
tcflow
(* fd , action *)- 暂停或恢复文件 Descriptors* fd *上的 Importing 或输出。 * action *参数可以是
TCOOFF
暂停输出,TCOON
重启输出,TCIOFF
暂停 Importing,或TCION
重启 Importing。
- 暂停或恢复文件 Descriptors* fd *上的 Importing 或输出。 * action *参数可以是
See also
Module tty
普通端子控制操作的便利Function。
36.7.1. Example
这是一个提示您 Importing 密码并关闭回显的Function。请注意,该技术使用单独的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 = raw_input(prompt)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old)
return passwd