python3、尝试读取多个HID输入,Raspberry Pi

python 3, try to read from multiple HID inputs, Raspberry Pi

我有一个条形码扫描器连接到我的 RasPi,没有任何 tty,这意味着没有监视器的无头。换句话说,数字输入的键盘记录器。此扫描仪可读取 GTIN 或 EAN 等数字条形码。它有效,脚本在启动时由 sh 启动。我使用的脚本如下所示:

import sys

tStr = ''
while 1:
        fp = open('/dev/hidraw3', 'rb')
        buffer = fp.read(8)
        for c in buffer:
                if c:
                        if c == 40 or c == 88: # [ENTER-key]
                                function_to_handle_result (tStr)
                                tStr = ''
                        elif c == 98 or c == 39:
                                c = 0
                                tStr = tStr + str(c)
                        elif c > 29 and c < 39:
                                c = c - 29
                                tStr = tStr + str(c)
                        elif c > 88 and c < 98:
                                c = c - 88
                                tStr = tStr + str(c)

现在我希望用户能够手动输入数字,以防条形码损坏and/or无法读取,并连接了数字键盘。如果我知道虚拟文件及其编号,如“/dev/hidraw3”。

,则这两个设备中的每一个都可以单独使用上面的脚本

现在我想合并输入以便能够访问一个脚本和一个函数中的值,并且我想猜测正确的 hidraw-path。

这是我的方法,对我来说似乎合乎逻辑,但行不通。没有错误消息,它什么都不做。我做错了什么?

import sys
from pathlib import Path

t = ''

def handle_c(c):
        global t
        if c == 40 or c == 88:
                function_to_handle_result (t)
                t = ''
        elif c == 98 or c == 39:
                c = 0
                t = t + str(c)
        elif c > 29 and c < 39:
                c = c - 29
                t = t + str(c)
        elif c > 88 and c < 98:
                c = c-88
                t = t + str(c)
        return

hid = {}
f = {}
b = {}
c = {}
while 1:
        for i in range(10):
                hid[i] = '/dev/hidraw'+str(i) # guessing path
                if Path(hid[i]).exists(): # check if path exists
                        f[i] = open(hid[i], 'rb')
                        b[i] = f[i].read(8)
                        for c[i] in b[i]:
                                if c[i]:
                                        handle_c(c[i])

在早期的方法中,我没有像这里那样使用动态变量,结果相同,它什么也不做。

感谢您的帮助。

您可以使用 python-evdev 访问数字键盘(以及条形码扫描仪)。它是 linux evdev 接口的 python 实现,它基于输入设备生成的事件,即 HID ( https://en.wikipedia.org/wiki/Evdev )

http://python-evdev.readthedocs.io/en/latest/tutorial.html(对于多个设备,请参阅从多个设备读取事件

in https://khanhicetea.com/post/read_input_from_usb_keyboard_in_linux/ 是使用 evdev 和条码扫描仪的代码