36.7. "termios" — Le style POSIX le contrôle TTY
************************************************

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.

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)

   Retourne une liste contenant les attributs TTY 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 TTY
   (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* doit être fait en utilisant les
   constantes symboliques définies dans le module "termios".

termios.tcsetattr(fd, when, attributes)

   Définit les attributs TTY pour le descripteur de fichiers *fd* à
   partir des *attributs*, qui est une liste comme celle retournée par
   "tcgetattr()". L’argument *when* détermine quand les attributs sont
   changés: "TCSANOW" pour un changement immédiat, "TCSADRAIN" pour un
   changement après la transmission de toute sortie en file d’attente,
   ou "TCSAFLUSH" pour un changement après avoir transmis toute sortie
   en file d’attente et rejeté toutes entrée en file d’attente.

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 a une définition spécifique pour chaque système.

termios.tcdrain(fd)

   Attends 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)

   Suspends ou reprends 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.

Voir aussi:

  Le module "tty"
     Fonctions utiles pour les opérations de contrôle communes dans le
     terminal.


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