termios — POSIX-konforme tty-Steuerung


Dieses Modul bietet eine Schnittstelle zu den POSIX-Aufrufen zur Steuerung von tty-Ein-/Ausgaben. Eine vollständige Beschreibung dieser Aufrufe finden Sie auf der Unix-Handbuchseite termios(3). Es ist nur für Unix-Versionen verfügbar, die eine POSIX-konforme tty-Ein-/Ausgabe-Steuerung im termios-Stil unterstützen, die während der Installation konfiguriert wurde.

Alle Funktionen in diesem Modul nehmen einen Dateideskriptor fd als erstes Argument. Dies kann ein ganzzahliger Dateideskriptor sein, wie er von sys.stdin.fileno() zurückgegeben wird, oder ein Datei-Objekt, wie z.B. sys.stdin selbst.

Dieses Modul definiert auch alle Konstanten, die zur Arbeit mit den hier bereitgestellten Funktionen benötigt werden; diese haben denselben Namen wie ihre Gegenstücke in C. Bitte schlagen Sie in Ihrer Systemdokumentation nach, um weitere Informationen zur Verwendung dieser Terminalsteuerungsschnittstellen zu erhalten.

Das Modul definiert die folgenden Funktionen

termios.tcgetattr(fd)

Gibt eine Liste zurück, die die tty-Attribute für den Dateideskriptor fd enthält, wie folgt: [iflag, oflag, cflag, lflag, ispeed, ospeed, cc] wobei cc eine Liste der speziellen tty-Zeichen ist (jedes ein String der Länge 1, außer den Elementen mit den Indizes VMIN und VTIME, die ganze Zahlen sind, wenn diese Felder definiert sind). Die Interpretation der Flags und Geschwindigkeiten sowie die Indizierung im cc-Array müssen mit den symbolischen Konstanten erfolgen, die im Modul termios definiert sind.

termios.tcsetattr(fd, when, attributes)

Setzt die tty-Attribute für den Dateideskriptor fd aus den attributes, die eine Liste wie die von tcgetattr() zurückgegebene ist. Das Argument when bestimmt, wann die Attribute geändert werden.

termios.TCSANOW

Ändert Attribute sofort.

termios.TCSADRAIN

Ändert Attribute, nachdem die gesamte gepufferte Ausgabe gesendet wurde.

termios.TCSAFLUSH

Ändert Attribute, nachdem die gesamte gepufferte Ausgabe gesendet und die gesamte gepufferte Eingabe verworfen wurde.

termios.tcsendbreak(fd, duration)

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

termios.tcdrain(fd)

Wartet, bis die gesamte an den Dateideskriptor fd geschriebene Ausgabe übertragen wurde.

termios.tcflush(fd, queue)

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

termios.tcflow(fd, action)

Setzt die Ein- oder Ausgabe auf dem Dateideskriptor fd aus oder setzt sie fort. Das Argument action kann TCOOFF sein, um die Ausgabe anzuhalten, TCOON, um die Ausgabe fortzusetzen, TCIOFF, um die Eingabe anzuhalten, oder TCION, um die Eingabe fortzusetzen.

termios.tcgetwinsize(fd)

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

Hinzugefügt in Version 3.11.

termios.tcsetwinsize(fd, winsize)

Setzt die tty-Fenstergröße für den Dateideskriptor fd aus winsize, das ein zweistelliges Tupel (ws_row, ws_col) ist, ähnlich dem von tcgetwinsize() zurückgegebenen. Erfordert mindestens eines der Paare (termios.TIOCGWINSZ, termios.TIOCSWINSZ); (termios.TIOCGSIZE, termios.TIOCSSIZE) müssen definiert sein.

Hinzugefügt in Version 3.11.

Siehe auch

Modul tty

Nützliche Funktionen für gängige Terminalsteuerungsoperationen.

Beispiel

Hier ist eine Funktion, die nach einem Passwort fragt, ohne dass es angezeigt wird. Beachten Sie die Technik, die einen separaten Aufruf von tcgetattr() und eine tryfinally Anweisung verwendet, um sicherzustellen, dass die alten tty-Attribute exakt wiederhergestellt werden, egal was passiert.

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