如何用Python的evdev从HID条码扫描器获取有效字符串并过滤Up事件
过滤条码扫描器的Up事件,只保留Down事件
嘿,别担心!我来帮你搞定这个需求~先给你简单解释下当前输出里的信息:那些down和up对应条码扫描器按键的按下和抬起动作,在evdev的事件里,event.value字段会明确标记事件类型:
1代表按键按下(也就是你要的Down事件)0代表按键抬起(Up事件)2代表按键长按重复
所以要只保留Down事件,只需要在你的判断逻辑里加上event.value == 1的条件就行啦!
修改后的代码如下:
from evdev import InputDevice, ecodes, categorize dev = InputDevice('/dev/input/event2') print(dev) for event in dev.read_loop(): # 只筛选按键按下的事件 if event.type == ecodes.EV_KEY and event.value == 1: print(categorize(event))
运行这个脚本后,你就只会看到类似key event at ..., 5 (KEY_4), down这样的Down事件输出了~
另外,既然你最终是要获取条码的完整字符串输出,我再给你个进阶版脚本参考——它能自动把按键事件转换成对应字符,等到扫描器发送ENTER键(大部分扫描器都会用这个作为条码结束标记)时,直接输出完整的条码:
from evdev import InputDevice, ecodes, categorize dev = InputDevice('/dev/input/event2') print(dev) barcode = "" # 按键码到字符的映射,按需补充更多字符(比如字母、符号) key_map = { ecodes.KEY_0: '0', ecodes.KEY_1: '1', ecodes.KEY_2: '2', ecodes.KEY_3: '3', ecodes.KEY_4: '4', ecodes.KEY_5: '5', ecodes.KEY_6: '6', ecodes.KEY_7: '7', ecodes.KEY_8: '8', ecodes.KEY_9: '9', } for event in dev.read_loop(): if event.type == ecodes.EV_KEY and event.value == 1: key_event = categorize(event) # 检测到ENTER键时,输出完整条码并重置 if key_event.keycode == 'KEY_ENTER': print(f"扫描完成:{barcode}") barcode = "" else: # 将按键转换成对应字符,拼接到条码字符串中 char = key_map.get(event.code, '') barcode += char
这个版本应该更贴合你实际使用条码扫描器的需求哦😉
内容的提问来源于stack exchange,提问作者Prakash Ganesan
相关产品推荐
相关产品推荐

