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.
Verfügbarkeit: Unix.
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 IndizesVMINundVTIME, 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 Modultermiosdefiniert 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:
TCIFLUSHfür die Eingabewarteschlange,TCOFLUSHfür die Ausgabewarteschlange oderTCIOFLUSHfü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
TCOOFFsein, um die Ausgabe anzuhalten,TCOON, um die Ausgabe fortzusetzen,TCIOFF, um die Eingabe anzuhalten, oderTCION, 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. Erforderttermios.TIOCGWINSZodertermios.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 vontcgetwinsize()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 try … finally 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