Skip to main content

35.6. termios — POSIX样式tty控件


此模块为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)

返回包含文件描述符 fd 的tty属性的列表,如下所示:[iflag, oflag, cflag, lflag, ispeed, ospeed, cc] 其中 cc 是tty特殊字符的列表(每个字符串的长度为1,除了具有索引 VMINVTIME 的项目,这些字段是定义)。标记和速度的解释以及 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 重新启动输入。

参见

模块 tty

公共端控制操作的方便功能。

35.6.1. 例

这里有一个函数,提示输入密码,并关闭回显。注意使用单独的 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