如何防止Python密钥侦听器泄漏到下一个终端?

时间:2020-07-26 03:52:29

标签: python keyboard pynput

我在Python中有一个关键侦听器,可以从列表中选择一些选项。选择效果很好。但是,无论我按什么键,都将输入下一个终端输入。例如,这是我的代码

import os
from pynput.keyboard import Key, Listener

cls = lambda:os.system("cls")

def on_press(key):
    """Listen for keywords like UP, DOWN and ENTER"""
    global KEY
    if key == Key.up:
        KEY = 'up'
        return False
    elif key == Key.down:
        KEY = 'down'
        return False
    elif key == Key.enter:
        KEY = 'enter'
        return False
    elif str(key) == "'\\x03'" or key == Key.esc:
        KEY = 'esc'
        return False
    return True

def OptionSelector(option: list) -> int:
    current = 0
    while True:
        output = ''
        cls()

        for text in option:
            index = option.index(text)
            output += '(*)' if current == index else '( )'
            output += f' {text}\n'
        print(output)

        with Listener(on_press=on_press) as OptionListener:
            OptionListener.join()

        global KEY
        if KEY == 'up':
            if current > 0:
                current -= 1
        elif KEY == 'down':
            if current != (len(option) - 1):
                current += 1
        elif KEY == 'enter':
            OptionListener.stop()
            cls()
            return current
        elif KEY == 'esc':
            exit()

print(OptionSelector(['a', 'b', 'c', 'd', 'e']))

当我按下“ abcdefg”时,在python代码中看到的内容没有任何变化。但是,当我按下“ Key.enter”时,代码将很好地执行,然后在终端上的新行将显示我尝试在终端上执行abcdefg

D:\codes\Python\data>abcdefg
'abcdefg' is not recognized as an internal or external command,
operable program or batch file.

D:\codes\Python\data>

如何阻止按键监听泄漏到下一个终端线路?

0 个答案:

没有答案