# `termios` — Contrôle de terminal de style POSIX

Ce module fournit une interface aux appels POSIX pour le contrôle des entrées-sorties d'un terminal. Pour une description complète de ces appels, voir la page du manuel UNIX termios(3). Il n'est disponible que pour les versions Unix qui gèrent le contrôle des entrées-sorties du terminal à travers des appels POSIX termios configurés à l’installation.

Availability: Unix.

Toutes les fonctions de ce module prennent un descripteur de fichier fd comme premier argument. Ça peut être un descripteur de fichiers entier, tel que le renvoie `sys.stdin.fileno()`, ou un file object, tel que `sys.stdin`.

Ce module définit aussi toutes les constantes nécessaires pour travailler avec les fonctions fournies ici ; elles ont les mêmes noms que leurs équivalents en C. Pour plus d’informations sur l’utilisation de ces terminaux, veuillez vous référer à votre documentation système.

Le module définit les fonctions suivantes :

termios.tcgetattr(fd)

  Renvoie une liste contenant les attributs du terminal pour le descripteur de fichier fd, tel que : `[iflag, oflag, cflag, lflag, ispeed, ospeed, cc]` où cc est une liste de caractères spéciaux du terminal (chacun est une chaine de caractère de longueur 1, à l’exception des éléments ayant les indices `VMIN` et `VTIME`, ceux-ci sont alors des entiers quand ces champs sont définis). L’interprétation des options (flags en anglais) et des vitesses ainsi que l’indexation dans le tableau cc doivent être faites en utilisant les constantes symboliques définies dans le module `termios`.

termios.tcsetattr(fd, when, attributes)

  Set the tty attributes for file descriptor fd from the attributes, which is a list like the one returned by `tcgetattr()`. The when argument determines when the attributes are changed:

  termios.TCSANOW

    Change attributes immediately.

  termios.TCSADRAIN

    Change attributes after transmitting all queued output.

  termios.TCSAFLUSH

    Change attributes after transmitting all queued output and discarding all queued input.

termios.tcsendbreak(fd, duration)

  Envoie une pause sur le descripteur de fichier fd. Une duration à zéro envoie une pause de 0,25 à 0,5 seconde ; une duration différente de zéro possède une signification spécifique sur chaque système.

termios.tcdrain(fd)

  Attend que toutes les sorties écrites dans le descripteur de fichier fd soient transmises.

termios.tcflush(fd, queue)

  Vide la queue de données du descripteur de fichier fd. Le sélecteur queue précise la queue : `TCIFLUSH` pour la queue des entrées, `TCOFLUSH` pour la queue des sorties, ou `TCIOFLUSH` pour les deux queues.

termios.tcflow(fd, action)

  Suspend ou reprend l’entrée ou la sortie du descripteur de fichier fd. L’argument action peut être `TCOOFF` pour suspendre la sortie, `TCOON` pour relancer la sortie, `TCIOFF` pour suspendre l’entrée, ou `TCION` pour relancer l’entrée.

termios.tcgetwinsize(fd)

  Return a tuple `(ws_row, ws_col)` containing the tty window size for file descriptor fd. Requires `termios.TIOCGWINSZ` or `termios.TIOCGSIZE`.

  Nouveau dans la version 3.11.

termios.tcsetwinsize(fd, winsize)

  Set the tty window size for file descriptor fd from winsize, which is a two-item tuple `(ws_row, ws_col)` like the one returned by `tcgetwinsize()`. Requires at least one of the pairs (`termios.TIOCGWINSZ`, `termios.TIOCSWINSZ`); (`termios.TIOCGSIZE`, `termios.TIOCSSIZE`) to be defined.

  Nouveau dans la version 3.11.

Voir aussi

Le module `tty`

  Fonctions utiles pour les opérations de contrôle communes dans le terminal.

## Exemple

Voici une fonction qui demande à l’utilisateur d’entrer un mot de passe sans l’afficher. Remarquez la technique qui consiste à séparer un appel à `tcgetattr()` et une instruction `try`… `finally` pour s’assurer que les anciens attributs du terminal soient restaurés tels quels quoi qu’il arrive :

    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