使用python获取系统范围的按键

时间:2019-06-27 15:48:51

标签: python bash curses xinput

我试图编写一个程序,每当按下某些键时就会执行代码。我目前正在这项工作中,但不幸的是,此解决方案非常慢。直到按下按钮几秒钟后,Python才发现有关按键的信息。

command = "./STB_KEYCAP.sh"
popen = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)
for stdout_line in iter(popen.stdout.readline, ""):
    stdout_line = stdout_line.decode("utf-8")[0]

    if stdout_line == "a":
        channelUp()
    elif stdout_line == "d":
        channelDown()

STB_KEYCAP.py:

xinput test-xi2 --root 3| grep -A2 --line-buffered RawKeyRelease | while read -r line ;
do 



    #Trim line down and remove non digits
    if [[ $line == *"detail"* ]];
    then
        key=$( echo $line | sed "s/[^0-9]*//g")

        if [[ $key == "38" ]];
        then
            echo "a"
        fi

        if [[ $key == "40" ]];
        then
            echo "d"
        fi

        if [[ $key == "42" ]];
        then
            echo "g"
        fi

        sleep 0
    fi
done

同样,这确实可行,但是要采取措施需要花费几秒钟的时间。关于如何重写它以使其更快的任何提示都将很棒!

1 个答案:

答案 0 :(得分:0)

我最终找到了一个对我来说很好的解决方案。不利的一面是,它要求脚本以管理员权限运行,在我看来,这不是问题,但对于某些用途可能不起作用。 我最终为键盘解析了/ dev / input文件,并从那里的更改确定按键。该解决方案最终变得非常快,并给出了良好的结果。

f = open( "/dev/input/event5", "rb" );
while 1:
    data = f.read(24)
    bytes = struct.unpack('4IHHI', data)
    value = str(bytes).split(", ")
    if value[6] == "0)":
        if value[5] != "0":



                # DO SOMETHING WITH KEY