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]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 tryfinally 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