termios — POSIX 风格的 tty 控制


此模块提供了 POSIX tty I/O 控制调用的接口。有关这些调用的完整描述,请参阅 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 的字符串,除了索引为 VMINVTIME 的项,当这些字段定义时,它们是整数)。对标志和速度的解释以及 cc 数组中的索引必须使用 termios 模块中定义的符号常量进行。

termios.tcsetattr(fd, when, attributes)

attributes 设置文件描述符 fd 的 tty 属性,attributes 是一个类似于 tcgetattr() 返回的列表。when 参数决定何时更改属性。

termios.TCSANOW

立即更改属性。

termios.TCSADRAIN

在传输所有排队输出后更改属性。

termios.TCSAFLUSH

在传输所有排队输出并丢弃所有排队输入后更改属性。

termios.tcsendbreak(fd, duration)

在文件描述符 fd 上发送一个 break 信号。零 duration 发送一个 0.25–0.5 秒的 break 信号;非零 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.TIOCGWINSZtermios.TIOCGSIZE

在 3.11 版本中新增。

termios.tcsetwinsize(fd, winsize)

winsize 设置文件描述符 fd 的 tty 窗口大小,winsize 是一个两项元组 (ws_row, ws_col),类似于 tcgetwinsize() 返回的。需要定义至少一对 (termios.TIOCGWINSZ, termios.TIOCSWINSZ) 或 (termios.TIOCGSIZE, termios.TIOCSSIZE)。

在 3.11 版本中新增。

参见

模块 tty

用于常见终端控制操作的便捷函数。

示例

这是一个函数,它在回显关闭的情况下提示输入密码。请注意使用单独的 tcgetattr() 调用和 tryfinally 语句的技术,以确保无论发生什么情况,旧的 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