Heim > Backend-Entwicklung > Python-Tutorial > Wie erkennt man Tastatureingaben vom Terminal in einem Skript?

Wie erkennt man Tastatureingaben vom Terminal in einem Skript?

Mary-Kate Olsen
Freigeben: 2024-10-29 22:00:29
Original
469 Leute haben es durchsucht

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

So erkennen Sie Tastatureingaben in einem Skript vom Terminal aus

Es gibt verschiedene Möglichkeiten, Tastatureingaben in einem Skript vom Terminal aus zu erkennen, abhängig von Ihren Anforderungen und Ihrem Betrieb System.

Synchronisierte/blockierende Tastenerfassung

Dieser Ansatz blockiert das Skript, bis eine Taste gedrückt wird, und gibt dann die gedrückte Taste zurück.

  • Zur Vereinfachung input oder raw_input, eine Blockierungsfunktion, die von einem Benutzer eingegebenen Text zurückgibt, sobald er eine neue Zeile drückt.
  • Für eine einfache Blockierungsfunktion, die darauf wartet, dass der Benutzer eine einzelne Taste drückt, und dann diese Taste zurückgibt, verwenden Sie Folgendes 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>
Nach dem Login kopieren

Asynchrone Schlüsselerfassung

  • Ein Rückruf, der mit der gedrückten Taste immer dann aufgerufen wird, wenn der Benutzer eine Taste in die Eingabeaufforderung eingibt beim Eingeben von Dingen in einen Interpreter (einen Keylogger)
  • Ein Rückruf, der mit dem eingegebenen Text aufgerufen wird, nachdem der Benutzer die Eingabetaste drückt (ein weniger Echtzeit-Keylogger)

Abfrage

  • Der Benutzer möchte einfach in der Lage sein, etwas zu tun, wenn eine Taste gedrückt wird, ohne auf diese Taste warten zu müssen (dies sollte also nicht blockierend sein). Daher rufen sie eine poll()-Funktion auf, die entweder einen Schlüssel oder None zurückgibt. Dies kann entweder verlustbehaftet sein (wenn es zwischen den Abfragen zu lange dauert, eine Taste zu übersehen) oder nicht verlustbehaftet (der Poller speichert den Verlauf aller gedrückten Tasten, sodass diese immer zurückgegeben werden, wenn die Funktion poll() sie anfordert). in der gedrückten Reihenfolge).
  • Das Gleiche wie oben, außer dass die Umfrage nur dann etwas zurückgibt, wenn der Benutzer eine neue Zeile drückt.

Roboter

  • Dies sind etwas, das aufgerufen werden kann, um Tastaturereignisse programmgesteuert auszulösen. Dies kann zusammen mit Schlüsselerfassungen verwendet werden, um sie dem Benutzer wiederzugeben

Das obige ist der detaillierte Inhalt vonWie erkennt man Tastatureingaben vom Terminal in einem Skript?. 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