Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk Mengesan Input Papan Kekunci dari Terminal dalam Skrip?

Bagaimana untuk Mengesan Input Papan Kekunci dari Terminal dalam Skrip?

Mary-Kate Olsen
Lepaskan: 2024-10-29 22:00:29
asal
469 orang telah melayarinya

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

Cara mengesan input papan kekunci dalam skrip daripada terminal

Terdapat beberapa cara untuk mengesan input papan kekunci dalam skrip daripada terminal, bergantung pada keperluan dan operasi anda sistem.

Tangkapan kekunci Segerak/Menyekat

Pendekatan ini menyekat skrip sehingga kekunci ditekan, dan kemudian mengembalikan kekunci yang ditekan.

  • Untuk mudah input atau raw_input, fungsi menyekat yang mengembalikan teks yang ditaip oleh pengguna sebaik sahaja mereka menekan baris baharu.
  • Untuk fungsi sekatan mudah yang menunggu pengguna menekan satu kekunci, kemudian mengembalikan kekunci itu, gunakan yang berikut kod.
<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>
Salin selepas log masuk

Tangkapan kunci tak segerak

  • Panggil balik yang dipanggil dengan kekunci yang ditekan apabila pengguna menaip kekunci ke dalam gesaan arahan, walaupun apabila menaip sesuatu ke dalam penterjemah (keylogger)
  • Panggil balik yang dipanggil dengan teks yang ditaip selepas pengguna menekan enter (kurang keylogger masa nyata)

Polling

  • Pengguna hanya mahu dapat melakukan sesuatu apabila kekunci ditekan, tanpa perlu menunggu kekunci itu (jadi ini sepatutnya tidak menyekat). Oleh itu mereka memanggil fungsi poll() dan sama ada mengembalikan kunci, atau mengembalikan Tiada. Ini boleh menjadi lossy (jika mereka mengambil masa terlalu lama untuk antara tinjauan pendapat mereka boleh terlepas kunci) atau tidak rugi (peninjau akan menyimpan sejarah semua kekunci yang ditekan, jadi apabila fungsi poll() memintanya, mereka akan sentiasa dikembalikan dalam urutan ditekan).
  • Sama seperti di atas, kecuali tinjauan pendapat hanya mengembalikan sesuatu apabila pengguna menekan baris baharu.

Robot

  • Ini ialah sesuatu yang boleh dipanggil untuk melancarkan acara papan kekunci secara pemprograman. Ini boleh digunakan bersama-sama tangkapan kunci untuk menggemakannya kembali kepada pengguna

Atas ialah kandungan terperinci Bagaimana untuk Mengesan Input Papan Kekunci dari Terminal dalam Skrip?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan