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.
Verfügbarkeit: Unix.
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 IndizesVMINundVTIME, 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 Modultermiosfestgelegt sind.
- 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:
TCIFLUSHfür die Eingabewarteschlange,TCOFLUSHfür die Ausgabewarteschlange oderTCIOFLUSHfür beide.
- termios.tcflow(fd, action)¶
Setzt die Eingabe oder Ausgabe auf dem Dateideskriptor fd aus oder nimmt sie wieder auf. Das Argument action kann
TCOOFFsein, um die Ausgabe auszusetzen,TCOON, um die Ausgabe wieder zu starten,TCIOFF, um die Eingabe auszusetzen, oderTCION, um die Eingabe wieder zu starten.
- termios.tcgetwinsize(fd)¶
Gibt ein Tupel
(ws_row, ws_col)mit der tty-Fenstergröße für den Dateideskriptor fd zurück. Erforderttermios.TIOCGWINSZodertermios.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, dastcgetwinsize()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 untertcsetwinsize().
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