35.6. 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.

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 tty para o descritor de arquivo fd a partir de attribute, que é uma lista como a retornada por tcgetattr(). O argumento when determina quando os atributos são alterados: TCSANOW para mudar imediatamente, TCSADRAIN para alterar após transmitir todas as saídas na fila ou TCSAFLUSH para alterar após transmitir todas as saídas na fila e descartando todas as entradas na fila.

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.

Ver também

Módulo tty

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

35.6.1. 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 tryfinally para garantir que os atributos tty antigos sejam restaurados exatamente, aconteça o que acontecer:

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