36.7. termios — Controle de tty no estilo POSIX

This module provides an interface to the POSIX calls for tty I/O control. For a complete description of these calls, see termios(2) Unix manual page. It is only available for those Unix versions that support POSIX termios style tty I/O control configured during installation.

All functions in this module take a file descriptor fd as their first argument. This can be an integer file descriptor, such as returned by sys.stdin.fileno(), or a file object, such as sys.stdin itself.

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)

Send a break on file descriptor fd. A zero duration sends a break for 0.25 –0.5 seconds; a nonzero duration has a system dependent meaning.

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.

36.7.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 = raw_input(prompt)
    finally:
        termios.tcsetattr(fd, termios.TCSADRAIN, old)
    return passwd