首页 > 解决方案 > 如何仅通过一个 Python 进程使用 USB HID 设备?

问题描述

我正在使用条形码扫描仪开发后台应用程序。条形码扫描仪在我的 Linux 操作系统上被识别为 USB HID(人机接口设备)设备。因此,默认的 USB HID 驱动程序已加载,扫描仪的行为就像键盘一样。

我可以使用 pyxhook Python 模块读取扫描仪的 STDIN 内容。因此,即使我的进程在后台运行,我也可以从条形码扫描仪读取输入。

我的问题是,后台应用程序也在从常规键盘读取输入,因为它也写入 STDIN。

我想仅通过后台进程使用条形码扫描仪的 STDIN,而忽略其他 HID 设备(如键盘)的 STDIN,但我不知道如何实现。任何想法?

标签: pythonlinuxstdinbarcode-scannerusb-hid

解决方案


如果您在较低级别(evdev)上拦截输入,则可以按设备将其拆分。对于 python,有python-evdev。您可以根据名称过滤设备,然后从那里开始。一个缺点是您必须自己将 evdev 事件转换为可读输入(内核通常会为您执行此操作)。

我编写了一个简单的程序,用于将条形码保存到文件中,以在 RPi 上运行(额外支持 GS1-128/SSCC-128/EAN-128)。


推荐阅读