# `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)

  Retorna uma lista contendo os atributos tty para o descritor de arquivo fd, da seguinte forma: `[iflag, oflag, cflag, lflag, ispeed, ospeed, cc]` onde cc é uma lista dos caracteres especiais do tty (cada uma string de comprimento 1, exceto os itens com índices `VMIN` e `VTIME`, que são números inteiros quando esses campos são definidos). A interpretação dos sinalizadores e as velocidades, bem como a indexação no vetor cc, devem ser feitas usando as constantes simbólicas definidas no módulo `termios`.

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