termios — tty-Steuerung im POSIX-Stil


Dieses Modul stellt eine Schnittstelle zu den POSIX-Aufrufen für die tty-E/A-Steuerung bereit. Eine vollständige Beschreibung dieser Aufrufe steht in der Unix-Man-Page termios(3). Es ist nur für diejenigen Unix-Fassungen verfügbar, die eine tty-E/A-Steuerung im POSIX-termios-Stil unterstützen und bei deren Installation sie eingerichtet wurde.

Alle Funktionen in diesem Modul nehmen einen Dateideskriptor fd als erstes Argument. Das kann ein ganzzahliger Dateideskriptor sein, wie sys.stdin.fileno() ihn zurückgibt, oder ein Dateiobjekt wie sys.stdin selbst.

Dieses Modul legt außerdem alle Konstanten fest, die zum Arbeiten mit den hier bereitgestellten Funktionen nötig sind. Sie haben dieselben Namen wie ihre Gegenstücke in C. Weitere Informationen zur Verwendung dieser Schnittstellen zur Terminalsteuerung stehen in der Dokumentation deines Systems.

Das Modul legt die folgenden Funktionen fest:

termios.tcgetattr(fd)

Gibt eine Liste mit den tty-Attributen für den Dateideskriptor fd zurück, und zwar so: [iflag, oflag, cflag, lflag, ispeed, ospeed, cc], wobei cc eine Liste der tty-Sonderzeichen ist (jedes eine Zeichenkette der Länge 1, außer den Elementen mit den Indizes VMIN und VTIME, die ganze Zahlen sind, wenn diese Felder festgelegt sind). Die Auslegung der Flags und der Geschwindigkeiten sowie die Indizierung im Array cc müssen über die symbolischen Konstanten erfolgen, die im Modul termios festgelegt sind.

termios.VMIN
termios.VTIME

Indizes in das Array cc, die ein nicht kanonisches Lesen steuern: die kleinste Anzahl zu lesender Zeichen beziehungsweise die Wartezeit in Zehntelsekunden.

termios.tcsetattr(fd, when, attributes)

Setzt die tty-Attribute für den Dateideskriptor fd aus attributes, einer Liste wie der, die tcgetattr() zurückgibt. Das Argument when bestimmt, wann die Attribute geändert werden:

termios.TCSANOW

Ändert die Attribute sofort.

termios.TCSADRAIN

Ändert die Attribute, nachdem alle in der Warteschlange stehende Ausgabe übertragen wurde.

termios.TCSAFLUSH

Ändert die Attribute, nachdem alle in der Warteschlange stehende Ausgabe übertragen und alle in der Warteschlange stehende Eingabe verworfen wurde.

termios.tcsendbreak(fd, duration)

Sendet ein Break auf dem Dateideskriptor fd. Eine duration von null sendet ein Break für 0,25–0,5 Sekunden, eine duration ungleich null hat eine systemabhängige Bedeutung.

termios.tcdrain(fd)

Wartet, bis alle auf den Dateideskriptor fd geschriebene Ausgabe übertragen wurde.

termios.tcflush(fd, queue)

Verwirft die in der Warteschlange stehenden Daten auf dem Dateideskriptor fd. Der Selektor queue gibt an, welche Warteschlange: TCIFLUSH für die Eingabewarteschlange, TCOFLUSH für die Ausgabewarteschlange oder TCIOFLUSH für beide.

termios.TCIFLUSH
termios.TCOFLUSH
termios.TCIOFLUSH

Werte für den Wähler queue: die Eingabewarteschlange, die Ausgabewarteschlange oder beide Warteschlangen.

termios.tcflow(fd, action)

Setzt die Eingabe oder Ausgabe auf dem Dateideskriptor fd aus oder nimmt sie wieder auf. Das Argument action kann TCOOFF sein, um die Ausgabe auszusetzen, TCOON, um die Ausgabe wieder zu starten, TCIOFF, um die Eingabe auszusetzen, oder TCION, um die Eingabe wieder zu starten.

termios.TCOOFF
termios.TCOON
termios.TCIOFF
termios.TCION

Werte für das Argument action: Ausgabe anhalten, Ausgabe fortsetzen, Eingabe anhalten oder Eingabe fortsetzen.

termios.tcgetwinsize(fd)

Gibt ein Tupel (ws_row, ws_col) mit der tty-Fenstergröße für den Dateideskriptor fd zurück. Erfordert termios.TIOCGWINSZ oder termios.TIOCGSIZE.

Added in version 3.11.

termios.TIOCGWINSZ
termios.TIOCGSIZE

ioctl()-Anfragen, mit denen sich die Fenstergröße des Terminals abfragen lässt. Nicht auf allen Plattformen festgelegt. tcgetwinsize() braucht mindestens eine davon.

termios.tcsetwinsize(fd, winsize)

Setzt die tty-Fenstergröße für den Dateideskriptor fd aus winsize, einem zweielementigen Tupel (ws_row, ws_col) wie dem, das tcgetwinsize() zurückgibt. Erfordert, dass mindestens eines der Paare (termios.TIOCGWINSZ, termios.TIOCSWINSZ) und (termios.TIOCGSIZE, termios.TIOCSSIZE) festgelegt ist.

Added in version 3.11.

termios.TIOCSWINSZ
termios.TIOCSSIZE

ioctl()-Anfragen, mit denen sich die Fenstergröße des Terminals setzen lässt. Nicht auf allen Plattformen festgelegt. Die nötigen Paare stehen unter tcsetwinsize().

Siehe auch

Modul tty

Bequeme Funktionen für häufige Vorgänge der Terminalsteuerung.

Beispiel

Hier eine Funktion, die ohne Bildschirmausgabe nach einem Passwort fragt. Beachte die Technik, über einen eigenen Aufruf von tcgetattr() und eine try … finally-Anweisung dafür zu sorgen, dass die alten tty-Attribute auf jeden Fall genau wiederhergestellt werden:

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