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!