如何仅通过一个Python进程使用USB HID设备?

如何仅通过一个Python进程使用USB HID设备?,python,linux,stdin,barcode-scanner,usb-hid,Python,Linux,Stdin,Barcode Scanner,Usb Hid,我正在开发一个使用条形码扫描仪的后台应用程序。条形码扫描仪在我的linux操作系统上被识别为USB HID(人机界面设备)设备。因此,将加载默认的USB HID驱动程序,扫描仪的行为类似于键盘 我能够使用pyxhook Python模块读取扫描仪的STDIN内容。因此,即使我的进程在后台运行,我也可以从条形码扫描仪读取输入 我的问题是,后台应用程序也在从常规键盘读取输入,因为它也会写入STDIN 我只想通过后台进程使用条形码扫描仪的标准输入法,而忽略其他HID设备(如键盘)的标准输入法,但我不知

我正在开发一个使用条形码扫描仪的后台应用程序。条形码扫描仪在我的linux操作系统上被识别为USB HID(人机界面设备)设备。因此,将加载默认的USB HID驱动程序,扫描仪的行为类似于键盘

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

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


我只想通过后台进程使用条形码扫描仪的标准输入法,而忽略其他HID设备(如键盘)的标准输入法,但我不知道如何实现这一点。有什么想法吗?

如果您在较低级别(evdev)截取输入,您可以按设备将其拆分。对于python来说,有两种方法。 您可以根据名称筛选设备,然后从那里开始。一个缺点是您必须自己将evdev事件转换为可读的输入(内核通常会为您做这件事)


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

条形码扫描器的作用类似于键盘。他们读取条形码,然后生成输入,就像有人在键盘上打字一样。我不确定您能否在应用程序级别区分输入设备。在应用程序中,它们看起来都像键盘按键。您可能必须降低硬件堆栈中的级别。但我不知道怎么说,“不接受X设备的输入”。主要制造商的扫描仪支持串行端口模式。你能用它代替HID模式吗?@kunif:我也在考虑这个选项,问题是在我的测试条形码扫描仪Zebra LS2208的情况下,没有linux可用的驱动程序,这意味着在串行模式下,设备仍然被识别为HID设备,而不是串行设备,另一个选项是使用特殊的RS232电缆(而不是usb接口)使用DB9插座,并将其插入到具有可用驱动程序(FTDI)的linux兼容rs232-to-usb转换器。但该选项更复杂,因为它需要特殊的电缆和适配器。因此,我想在软件级别解决此问题。与其处理复杂的组合,不如切换到可以轻松使用ttyX的扫描仪硬件。