termios — POSIX 风格的 tty 控件 — Python 文档
来自菜鸟教程
Python/docs/3.9/library/termios
termios — POSIX 风格的 tty 控件
该模块为 tty I/O 控制的 POSIX 调用提供了一个接口。 有关这些调用的完整说明,请参阅 termios(3) Unix 手册页。 它仅适用于支持安装期间配置的 POSIX termios 样式 tty I/O 控制的那些 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
的项目,当定义这些字段时,它们是整数)。 标志和速度的解释以及 cc 数组中的索引必须使用 termios 模块中定义的符号常量来完成。
- termios.tcsetattr(fd, when, attributes)
- 从 attributes 中设置文件描述符 fd 的 tty 属性,这是一个类似于 tcgetattr() 返回的列表。 when 参数确定何时更改属性:
TCSANOW
立即更改,TCSADRAIN
传输所有排队输出后更改,或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
重启输入。
例子
这是一个在关闭回显的情况下提示输入密码的功能。 请注意使用单独的 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