You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:14:57