# 35.6. `termios` - POSIX style tty control

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

  Return a list containing the tty attributes for file descriptor fd, as follows: `[iflag, oflag, cflag, lflag, ispeed, ospeed, cc]` where cc is a list of the tty special characters (each a string of length 1, except the items with indices `VMIN` and `VTIME`, which are integers when these fields are defined). 必须使用`termios`模块中定义的符号常量来解释标志和速度以及cc数组中的索引。

`termios.``tcsetattr`(fd, when, attributes)

  从属性中设置文件描述器fd的tty属性，这是像`tcgetattr()`返回的列表。参数确定属性何时更改：`TCSANOW`立即更改，`TCSADRAIN`在传输所有排队输出后更改，或`TCSAFLUSH`在发送所有排队的输出并丢弃所有排队的输入后进行更改。

`termios.``tcsendbreak`(fd, duration)

  发送休息描述器fd。零持续时间发送0.25-0.5秒的中断；非零的持续时间具有系统相关含义。

`termios.``tcdrain`(fd)

  等待直到所有写入文件描述器fd的输出被发送。

`termios.``tcflush`(fd, queue)

  舍弃队列中的数据描述器fd。队列选择器指定输入队列的`TCIFLUSH`，输出队列的`TCOFLUSH`，或`TCIOFLUSH`两个队列。

`termios.``tcflow`(fd, action)

  暂停或继续输入或输出到文件描述器fd。The action argument can be `TCOOFF` to suspend output, `TCOON` to restart output, `TCIOFF` to suspend input, or `TCION` to restart input.

也可以看看

模块`tty`
  公共端控制操作的方便功能。

## 35.6.1. Example

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