Maison > développement back-end > Tutoriel Python > Comment détecter la saisie au clavier du terminal dans un script ?

Comment détecter la saisie au clavier du terminal dans un script ?

Mary-Kate Olsen
Libérer: 2024-10-29 22:00:29
original
469 Les gens l'ont consulté

How to Detect Keyboard Input from the Terminal in a Script?

Comment détecter la saisie au clavier dans un script depuis le terminal

Il existe plusieurs façons de détecter la saisie au clavier dans un script depuis le terminal, en fonction de vos besoins et de votre fonctionnement système.

Capture de touche synchrone/bloquante

Cette approche bloque le script jusqu'à ce qu'une touche soit enfoncée, puis renvoie la touche qui a été enfoncée.

  • Pour simple input ou raw_input, une fonction de blocage qui renvoie le texte saisi par un utilisateur une fois qu'il appuie sur une nouvelle ligne.
  • Pour une fonction de blocage simple qui attend que l'utilisateur appuie sur une seule touche, puis renvoie cette touche, utilisez ce qui suit code.
<code class="python">class _Getch:
    """Gets a single character from standard input.  Does not echo to the
screen. From http://code.activestate.com/recipes/134892/"""
    def __init__(self):
        try:
            self.impl = _GetchWindows()
        except ImportError:
            try:
                self.impl = _GetchMacCarbon()
            except(AttributeError, ImportError):
                self.impl = _GetchUnix()

    def __call__(self): return self.impl()


class _GetchUnix:
    def __init__(self):
        import tty, sys, termios # import termios now or else you'll get the Unix version on the Mac

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

class _GetchMacCarbon:
        """
        A function which returns the current ASCII key that is down;
        if no ASCII key is down, the null string is returned.  The
        page http://www.mactech.com/macintosh-c/chap02-1.html was
        very helpful in figuring out how to do this.
        """
        def __init__(self):
            import Carbon
            Carbon.Evt #see if it has this (in Unix, it doesn't)

        def __call__(self):
            import Carbon
            if Carbon.Evt.EventAvail(0x0008)[0]==0: # 0x0008 is the keyDownMask
                return ''
            else:
                #
                # The event contains the following info:
                # (what,msg,when,where,mod)=Carbon.Evt.GetNextEvent(0x0008)[1]
                #
                # The message (msg) contains the ASCII char which is
                # extracted with the 0x000000FF charCodeMask; this
                # number is converted to an ASCII character with chr() and
                # returned
                #
                (what,msg,when,where,mod)=Carbon.Evt.GetNextEvent(0x0008)[1]
                return chr(msg &amp; 0x000000FF)


def getKey():
    inkey = _Getch()
    import sys
    for i in xrange(sys.maxint):
        k=inkey()
        if k<>'':break

    return k</code>
Copier après la connexion

Capture de touche asynchrone

  • Un rappel qui est appelé avec la touche enfoncée chaque fois que l'utilisateur tape une touche dans l'invite de commande, même lors de la saisie d'éléments dans un interprète (un enregistreur de frappe)
  • Un rappel qui est appelé avec le texte tapé après que l'utilisateur appuie sur Entrée (un enregistreur de frappe moins en temps réel)

Interrogation

  • L'utilisateur veut simplement pouvoir faire quelque chose lorsqu'une touche est enfoncée, sans avoir à attendre cette touche (cela ne devrait donc pas être bloquant). Ainsi, ils appellent une fonction poll() et qui renvoie une clé ou renvoie Aucune. Cela peut être soit avec perte (s'ils prennent trop de temps entre les interrogations, ils peuvent manquer une touche), soit sans perte (l'interrogateur stockera l'historique de toutes les touches enfoncées, donc lorsque la fonction poll() les demandera, elles seront toujours renvoyées. dans l'ordre dans lequel vous avez appuyé).
  • La même chose que ci-dessus, sauf que le sondage ne renvoie quelque chose que lorsque l'utilisateur appuie sur une nouvelle ligne.

Robots

  • Il s'agit de quelque chose qui peut être appelé pour déclencher des événements de clavier par programmation. Cela peut être utilisé avec les captures de touches pour les renvoyer à l'utilisateur

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