Heim > Backend-Entwicklung > Python-Tutorial > Wie kann man in der Python-Funktion „raw_input()' ein Zeitlimit für Benutzereingaben festlegen?

Wie kann man in der Python-Funktion „raw_input()' ein Zeitlimit für Benutzereingaben festlegen?

Mary-Kate Olsen
Freigeben: 2024-11-18 22:45:02
Original
988 Leute haben es durchsucht

How can you set a time limit on user input in Python's `raw_input()` function?

Anpassen der Roheingabe mit Zeitbeschränkungen

In Python pausiert die Funktion raw_input() die Ausführung eines Skripts, bis der Benutzer irgendeine Form von Eingabe bereitstellt. Was aber, wenn Sie für diese Eingabe ein Zeitlimit festlegen möchten, um zu verhindern, dass das Skript auf unbestimmte Zeit hängen bleibt?

Implementierung eines Zeitlimits

Ein Ansatz, der für Unix-basierte Systeme anwendbar ist, ist die Verwendung der signal.alarm-Funktion. Wenn diese Funktion mit einem Zeitlimit in Sekunden aufgerufen wird, löst sie nach der angegebenen Dauer eine KeyboardInterrupt-Ausnahme aus, wodurch der Aufruf von raw_input() effektiv übersprungen wird.

Plattformübergreifende Lösungen

Für plattformübergreifende Kompatibilität oder wenn Sie Windows verwenden, besteht eine alternative Methode darin, threading.Timer in Kombination mit thread.interrupt_main zu verwenden .

import thread
import threading

def raw_input_with_timeout(prompt, timeout=30.0):
    print(prompt, end=' ')
    timer = threading.Timer(timeout, thread.interrupt_main)
    astring = None
    try:
        timer.start()
        astring = input(prompt)
    except KeyboardInterrupt:
        pass
    timer.cancel()
    return astring
Nach dem Login kopieren

Beachten Sie, dass dieser Ansatz sowohl benutzerinitiierte Eingaben als auch Zeitüberschreitungen gleich behandelt und für beide „None“ zurückgibt Szenarien. Wenn Sie zwischen diesen Fällen unterscheiden müssen, können Sie den Code ändern, um bei Auftreten einer Zeitüberschreitung ein Flag zu setzen und es separat im KeyboardInterrupt-Handler zu behandeln.

Windows-spezifische Implementierung

Für eine Windows-spezifische Lösung können Sie eine Schleife nutzen, die msvcrt.kbhit abfragt, um nach Benutzereingaben zu suchen und gleichzeitig die Zeit bis zu überwachen Stellen Sie sicher, dass die Zeitüberschreitung durchgesetzt wird.

import msvcrt
import time

def raw_input_with_timeout(prompt, timeout=30.0):
    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
Nach dem Login kopieren

Berücksichtigen Sie die Standardeinstellung Wert

Wenn Sie vermeiden möchten, dass bei einem Timeout „None“ zurückgegeben wird, können Sie den Code ändern, um einen alternativen Standardwert anzugeben, der in solchen Fällen zurückgegeben werden soll.

Erweiterte Anpassung

Um zu verhindern, dass das Zeitlimit für Benutzer gilt, die einfach nur langsam tippen, können Sie das Timeout nach jeder Zeicheneingabe neu berechnen und so sicherstellen, dass nur der Timer läuft verfällt, wenn die Eingabe wirklich für längere Zeit pausiert wird.

Das obige ist der detaillierte Inhalt vonWie kann man in der Python-Funktion „raw_input()' ein Zeitlimit für Benutzereingaben festlegen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage