Python键盘事件(linux)

分类: linux

2020-12-19

|

178

|

评论:0

分享:

from evdev import InputDevice


key_dev = InputDevice("/dev/input/event4")
# waiting for IO event
dev_list, _, _ = select([key_dev], [], [], 0.2)

for dev in dev_list:
    if dev is key_dev:
        events = dev.read()
        print("-"*20)

        # get keyboard input event
        for env in events:
            if env.code in key_map and env.type == 0x01:
                print("-"*9, key_map[env.code], "-"*10)
                return key_map[env.code]
return ""

evdev包 需要安装

pip install evdev

其中event4是linux中键盘对应的keyboard input设备(linux一切皆为文件),不同的电脑对应额event是不一样的。

可以通过下诉命令查看对应设备

 cat /proc/bus/input/devices

输出

I: Bus=0019 Vendor=0000 Product=0005 Version=0000
N: Name="Lid Switch"
P: Phys=PNP0C0D/button/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/input/input0
U: Uniq=
H: Handlers=event0 
B: PROP=0
B: EV=21
B: SW=1


I: Bus=0019 Vendor=0000 Product=0001 Version=0000
N: Name="Power Button"
P: Phys=PNP0C0C/button/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input1
U: Uniq=
H: Handlers=kbd event1 
B: PROP=0
B: EV=3
B: KEY=10000000000000 0


I: Bus=0019 Vendor=0000 Product=0003 Version=0000
N: Name="Sleep Button"
P: Phys=PNP0C0E/button/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/input/input2
U: Uniq=
H: Handlers=kbd event2 
B: PROP=0
B: EV=3
B: KEY=4000 0 0

通过name字样可以找到对应的keyboard设备的event名称

监听到的事件中,code对应键盘的按键值,type对应事件类型(0x01为按键按下事件)

//20201219 上述方法只能监听本机keyboard事件(ssh 的设备的键盘无法对该程序进行控制)

可以采用监听stdin来完成同样的功能,代码如下

import sys, select, termios, tty


def getKey():
    tty.setraw(sys.stdin.fileno())
    select.select([sys.stdin], [], [], 1)
    key = sys.stdin.read(1)
    termios.tcsetattr(sys.stdin, termios.TCSADRAIN, settings)
    return key


if __name__ == "__main__":
    settings = termios.tcgetattr(sys.stdin)
    while True:
        print("get key: {}".format(getKey()))

其中关于tty的设置可参考官方文档:https://docs.python.org/zh-cn/3.7/library/termios.html, https://docs.python.org/zh-cn/3.7/library/tty.html


Powered by Froala Editor



转载请注明来源

文章:Python键盘事件(linux)

链接:/article/28

作者:大猫

标签: 异步IO
本文共 0 个回复

发表评论 (对文章评论)

captcha