# `termios` — Controle de tty no estilo POSIX

Este módulo fornece uma interface para as chamadas POSIX para controle de E/S do tty. Para uma descrição completa dessas chamadas, consulte a página de manual Unix termios(3). Está disponível apenas para as versões Unix que tenham suporte ao controle de E/S de tty no estilo POSIX do termios configurado durante a instalação.

Disponibilidade: Unix.

Todas as funções neste módulo usam um descritor de arquivo fd como seu primeiro argumento. Pode ser um descritor de arquivo de tipo inteiro, como retornado por `sys.stdin.fileno()`, ou um objeto arquivo, como o próprio `sys.stdin`.

Este módulo também define todas as constantes necessárias para trabalhar com as funções fornecidas aqui; estes têm o mesmo nome de seus equivalentes em C. Consulte a documentação do sistema para mais informações sobre o uso dessas interfaces de controle de terminal.

O módulo define as seguintes funções:

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). The interpretation of the flags and the speeds as well as the indexing in the cc array must be done using the symbolic constants defined in the `termios` module.

termios.tcsetattr(fd, when, attributes)

  Define os atributos do tty para descritor de arquivo fd a partir de attributes, que é uma lista como a retornada por `tcgetattr()`. O argumento when determina quando os atributos são alterados:

  termios.TCSANOW

    Altera os atributos imediatamente.

  termios.TCSADRAIN

    Altera os atributos depois de transmitir todas as saídas enfileiradas.

  termios.TCSAFLUSH

    Altera os atributos depois de transmitir todas as saídas enfileiradas e descartar todas as entradas enfileiradas.

termios.tcsendbreak(fd, duration)

  Envia uma quebra no descritor de arquivo fd. Uma duração zero, representada por duration, envia uma pausa por 0,25 a 0,5 segundos; duration com valor diferente de zero tem um significado dependente do sistema.

termios.tcdrain(fd)

  Aguarda até que toda a saída escrita no descritor de arquivo fd seja transmitida.

termios.tcflush(fd, queue)

  Descarta dados na fila no descritor de arquivo fd. O seletor queue especifica qual fila: `TCIFLUSH` para a fila de entrada, `TCOFLUSH` para a fila de saída ou `TCIOFLUSH` para as duas filas.

termios.tcflow(fd, action)

  Suspende ou retoma a entrada ou saída no descritor de arquivo fd. O argumento action pode ser `TCOOFF` para suspender a saída, `TCOON` para reiniciar a saída, `TCIOFF` para suspender a entrada ou `TCION` para reiniciar a entrada.

termios.tcgetwinsize(fd)

  Retorna uma tupla `(ws_row, ws_col)` contendo o tamanho da janela de terminal para o descritor de arquivo fd. Requer `termios.TIOCGWINSZ` ou `termios.TIOCGSIZE`.

  Adicionado na versão 3.11.

termios.tcsetwinsize(fd, winsize)

  Define o tamanho da janela de terminal para o descritor de arquivo fd de winsize, que é uma tupla de dois elementos `(ws_row, ws_col)` como a retornada por `tcgetwinsize()`. Requer pelo menos um dos pares (`termios.TIOCGWINSZ`, `termios.TIOCSWINSZ`); (`termios.TIOCGSIZE`, `termios.TIOCSSIZE`) a ser definido.

  Adicionado na versão 3.11.

Ver também

Módulo `tty`

  Funções de conveniência para operações comuns de controle de terminal.

## Exemplo

Aqui está uma função que solicita uma senha com o eco desativado. Observe a técnica usando uma chamada separada `tcgetattr()` e uma instrução `try` … `finally` para garantir que os atributos tty antigos sejam restaurados exatamente, aconteça o que acontecer:

    def getpass(prompt="Senha: "):
        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