Comment implémenter une entrée utilisateur limitée dans le temps en Python à l'aide de « raw_input() » ?

Patricia Arquette
Libérer: 2024-11-19 16:35:02
original
785 Les gens l'ont consulté

How to Implement Time-Limited User Input in Python Using `raw_input()`?

Saisie utilisateur limitée dans le temps avec entrée brute

En Python, la fonction raw_input() peut être utilisée pour demander à l'utilisateur une saisie. Cependant, il peut y avoir des scénarios dans lesquels vous souhaitez limiter le temps d'attente pour la saisie de l'utilisateur afin d'éviter de suspendre indéfiniment le programme.

Solution utilisant la minuterie de thread

Pour les plate-forme et des solutions spécifiques à Windows, vous pouvez utiliser threading.Timer à partir du module de threading. Importez les modules nécessaires :

import thread
import threading
Copier après la connexion

Définissez une fonction appelée raw_input_with_timeout :

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
Copier après la connexion

Cette fonction imprime l'invite, démarre une minuterie et demande une saisie à l'utilisateur à l'aide de la saisie. Si l'utilisateur met plus de temps que le délai d'attente spécifié pour saisir, le minuteur interrompt le thread principal, provoquant le déclenchement d'une exception KeyboardInterrupt. La minuterie est annulée pour éviter de nouvelles interruptions.

Si le délai d'entrée expire, il renverra Aucun. Si l'utilisateur fournit une entrée avant l'expiration du délai d'attente, il renverra la chaîne saisie.

Remarque :

  • Pour faire la distinction entre les délais d'attente et les interruptions initiées par l'utilisateur (par ex. , si l'utilisateur appuie sur Ctrl C), vous pouvez enregistrer une indication indiquant si l'interruption a été provoquée par un délai d'attente dans une variable globale ou utiliser try/sauf pour gérer l'exception KeyboardInterrupt et définissez un indicateur en conséquence.
  • Cette approche ne fonctionne pas sous Windows pour les « fichiers normaux » comme stdin. Pour une implémentation spécifique à Windows, envisagez d'interroger msvcrt.kbhit et msvcrt.getche en boucle tout en vérifiant les délais d'attente.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal