termios — POSIX 风格的 tty 控件 — Python 文档

来自菜鸟教程
Python/docs/3.7/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 ,除了具有索引 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
常用终端控制操作的便捷功能。


例子

这是一个在关闭回显的情况下提示输入密码的功能。 请注意使用单独的 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