So implementieren Sie ein Zeitlimit für Benutzereingaben in Python
Bei der Verwendung der Funktion raw_input() können Sie auf Situationen stoßen, in denen Sie dies wünschen um die Eingabe nach einer vordefinierten Dauer zu beenden. Glücklicherweise bietet Python mehrere Lösungen, um dieser Anforderung gerecht zu werden.
Nur Unix-Methode:
@jers Vorschlag nutzt die signal.alarm-Funktion, die nur unter Unix verfügbar ist Systeme. Diese Funktion löst eine KeyboardInterrupt-Ausnahme aus, wenn das angegebene Zeitlimit erreicht ist. Der folgende Code veranschaulicht diesen Ansatz:
import signal def raw_input_with_timeout(prompt, timeout): signal.alarm(timeout) try: return input(prompt) except KeyboardInterrupt: return None finally: signal.alarm(0) # Reset alarm to avoid interference
Plattformübergreifende und Windows-spezifische Methoden:
Für plattformübergreifende oder Windows-spezifische Lösungen sollten Sie die Verwendung von in Betracht ziehen threading.Timer-Klasse zusammen mit thread.interrupt_main. Dieser Ansatz sendet einen KeyboardInterrupt von einem Timer-Thread an den Hauptthread. Der folgende Code veranschaulicht diese Methode:
import threading def raw_input_with_timeout(prompt, timeout): print(prompt, end=' ') timer = threading.Timer(timeout, thread.interrupt_main) result = None try: timer.start() result = input(prompt) except KeyboardInterrupt: pass timer.cancel() return result
Windows-spezifische Methode (ungetestet):
In Windows-Umgebungen kann msvcrt verwendet werden, um Zeitüberschreitungen zu erreichen. Dieser Ansatz beinhaltet das Abfragen von Tastendrücken innerhalb einer engen Schleife und das Sammeln von Eingaben, bis eine maximale Zeit erreicht ist oder ein Zeilenumbruchzeichen erkannt wird.
import msvcrt import time def raw_input_with_timeout(prompt, timeout): print(prompt, end=' ') finishat = time.time() + timeout result = [] while True: if msvcrt.kbhit(): result.append(msvcrt.getche()) if result[-1] == '\r': return ''.join(result) time.sleep(0.1) else: if time.time() > finishat: return None
Anpassbares Verhalten:
Falls ein anderer Timeout-Rückgabewert als None gewünscht wird, ersetzen Sie einfach die return None-Anweisung in den obigen Codefragmenten. Darüber hinaus können durch Anpassen des Finishs nach jedem Tastendruck Zeitüberschreitungen basierend auf der Eingabegeschwindigkeit angepasst werden.
Das obige ist der detaillierte Inhalt vonWie implementiert man ein Zeitlimit für Benutzereingaben in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!