Maison >développement back-end >Tutoriel Python >Comment lire un seul caractère à partir de la saisie de l'utilisateur sur différentes plates-formes ?

Comment lire un seul caractère à partir de la saisie de l'utilisateur sur différentes plates-formes ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-18 09:21:15632parcourir

How to Read a Single Character from User Input Across Different Platforms?

Lecture d'un seul caractère à partir d'une entrée utilisateur multiplateforme

Dans divers scénarios de programmation, il devient nécessaire de lire un seul caractère à partir d'une entrée utilisateur sans mise en mémoire tampon ni écho. Cette fonctionnalité est similaire à la célèbre fonction getch() disponible dans Windows, mais une approche universelle qui fonctionne sur plusieurs plates-formes est souhaitée.

Solution :

Pour y parvenir lecture de caractères multiplateforme, vous pouvez utiliser une recette Python pilotée par la communauté à partir du site ActiveState Recipes : "lecture de caractères sans tampon de type getch() à partir de stdin sous Windows et Unix". Cette recette fournit une implémentation basée sur les classes, adaptée aux systèmes Windows et Unix.

Implémentation :

L'extrait de code suivant démontre l'implémentation du cross- classe de lecture de caractères de plate-forme :

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()

Pour utiliser cette classe, instanciez simplement la classe _Getch et appelez-la. Le résultat sera le caractère unique saisi par l'utilisateur, sans aucune mise en mémoire tampon ni écho. Par exemple :

result = getch()

Conclusion :

Cette approche de lecture de caractères multiplateforme est largement applicable dans les situations où une saisie immédiate de l'utilisateur est requise, comme la capture de frappes au clavier dans applications de terminal ou mise en œuvre d'interfaces utilisateur interactives.

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!

Déclaration:
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