termios
— POSIX 风格的 tty 控制¶
该模块为 tty I/O 控制提供了一个 POSIX 调用接口。有关这些调用的完整描述,请参阅termios(3) Unix 手册页。它仅适用于那些在安装过程中配置为支持 POSIX *termios* 风格 tty I/O 控制的 Unix 版本。
可用性: Unix。
此模块中的所有函数都将文件描述符 *fd* 作为其第一个参数。这可以是一个整数文件描述符,例如由 sys.stdin.fileno()
返回的,或者是一个文件对象,例如 sys.stdin
本身。
此模块还定义了使用此处提供的函数所需的所有常量;它们的名称与其在 C 中的对应项相同。有关使用这些终端控制接口的更多信息,请参阅您的系统文档。
该模块定义了以下函数
- termios.tcgetattr(fd)¶
返回一个列表,其中包含文件描述符 *fd* 的 tty 属性,如下所示:
[iflag, oflag, cflag, lflag, ispeed, ospeed, cc]
,其中 *cc* 是 tty 特殊字符的列表(每个字符都是长度为 1 的字符串,除了索引为VMIN
和VTIME
的项,当这些字段被定义时它们是整数)。必须使用termios
模块中定义的符号常量来完成对标志和速度的解释以及 *cc* 数组中的索引。
- termios.tcsetattr(fd, when, attributes)¶
根据 *attributes* 设置文件描述符 *fd* 的 tty 属性,*attributes* 是一个类似于
tcgetattr()
返回的列表。 *when* 参数确定何时更改属性- termios.TCSANOW¶
立即更改属性。
- termios.TCSADRAIN¶
在传输所有排队的输出后更改属性。
- termios.TCSAFLUSH¶
在传输所有排队的输出并丢弃所有排队的输入后更改属性。
- termios.tcsendbreak(fd, duration)¶
在文件描述符 *fd* 上发送一个中断。 零 *duration* 发送 0.25–0.5 秒的中断;非零 *duration* 具有系统相关含义。
- termios.tcdrain(fd)¶
等待直到写入文件描述符 *fd* 的所有输出都被传输。
- termios.tcflush(fd, queue)¶
丢弃文件描述符 *fd* 上的排队数据。 *queue* 选择器指定哪个队列:输入队列为
TCIFLUSH
,输出队列为TCOFLUSH
,或两个队列都为TCIOFLUSH
。
- termios.tcflow(fd, action)¶
暂停或恢复文件描述符 *fd* 上的输入或输出。 *action* 参数可以是
TCOOFF
以暂停输出,TCOON
以重新启动输出,TCIOFF
以暂停输入,或TCION
以重新启动输入。
- termios.tcgetwinsize(fd)¶
返回一个元组
(ws_row, ws_col)
,其中包含文件描述符 *fd* 的 tty 窗口大小。需要termios.TIOCGWINSZ
或termios.TIOCGSIZE
。在 3.11 版本中添加。
- termios.tcsetwinsize(fd, winsize)¶
根据 *winsize* 设置文件描述符 *fd* 的 tty 窗口大小,*winsize* 是一个类似于
tcgetwinsize()
返回的包含两项的元组(ws_row, ws_col)
。需要至少定义以下配对中的一个 (termios.TIOCGWINSZ
,termios.TIOCSWINSZ
); (termios.TIOCGSIZE
,termios.TIOCSSIZE
)。在 3.11 版本中添加。
另请参阅
- 模块
tty
用于常见终端控制操作的便捷函数。
示例¶
这是一个关闭回显提示输入密码的函数。请注意使用单独的 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