Nicht blockierende Eingabe: Ein einzelnes Zeichen plattformübergreifend lesen
Ein einzelnes Zeichen aus einer Benutzereingabe lesen, ohne dass es auf dem Bildschirm wiedergegeben wird ist ein häufiger Bedarf in verschiedenen Programmierszenarien. Obwohl Windows für diesen Zweck eine spezielle Funktion bereitstellt, kann es schwierig sein, eine plattformübergreifende Lösung zu implementieren.
Plattformübergreifender Ansatz
Um diese Einschränkung zu überwinden, a Der vielseitige Ansatz unter Verwendung der ActiveState Recipes-Bibliothek bietet eine Lösung, die nahtlos unter Windows, Linux und anderen Betriebssystemen funktioniert OSX:
class _Getch: """Gets a single character from standard input. Does not echo to the screen.""" def __init__(self): try: self.impl = _GetchWindows() except ImportError: self.impl = _GetchUnix() def __call__(self): return self.impl() class _GetchUnix: def __init__(self): import tty, sys def __call__(self): import sys, tty, termios fd = sys.stdin.fileno() old_settings = termios.tcgetattr(fd) try: tty.setraw(sys.stdin.fileno()) ch = sys.stdin.read(1) finally: termios.tcsetattr(fd, termios.TCSADRAIN, old_settings) return ch class _GetchWindows: def __init__(self): import msvcrt def __call__(self): import msvcrt return msvcrt.getch() getch = _Getch()
Verwendung
Um diese Methode zu verwenden, instanziieren Sie die _Getch-Klasse und rufen ihre aufrufbare Schnittstelle auf, um ein einzelnes Zeichen aus der Benutzereingabe zu lesen:
ch = getch()
Dieser Ansatz bietet einen nicht blockierenden Eingabemechanismus, der es Entwicklern ermöglicht, ein einzelnes Zeichen vom Benutzer zu lesen, ohne den zu unterbrechen Programmablauf oder die Ausgabe auf dem Bildschirm. Es ist ein wertvolles Tool für schnelle Antworten und interaktive Befehlszeilenanwendungen.
Das obige ist der detaillierte Inhalt vonWie kann ich ein einzelnes Zeichen aus Benutzereingaben lesen, ohne plattformübergreifend zu blockieren oder zu widerhallen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!