python 3,尝试从多个 HID 输入读取,Raspberry Pi

2024-02-13

我有一个条形码扫描仪连接到我的 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)

现在我希望用户能够手动输入数字,以防条形码损坏和/或无法读取,并连接数字键盘。如果我知道虚拟文件及其编号(例如“/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的python实现evdev基于输入设备生成的事件的接口,即 HID (https://en.wikipedia.org/wiki/Evdev https://en.wikipedia.org/wiki/Evdev )

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 3,尝试从多个 HID 输入读取,Raspberry Pi 的相关文章

随机推荐

  • 以编程方式发送短信Android(未接收状态)

    我在用http mobiforge com developing story sms messaging android http mobiforge com developing story sms messaging android逐字
  • 重写比较器接口的比较方法时使用什么排序算法?

    Collections sort ar new Comparator
  • 为什么gdb需要root权限才能调试用户程序?

    我已经相当成功地使用 gdb 一段时间了 但我最近升级了我的 Ubuntu 版本 现在看来 如果我以 root 身份运行 我只能让 gdb 成功运行我的程序 那是 gdb q sleep ex run 60 Reading symbols
  • 如果 Cassandra 报告失败但进行了部分写入该怎么办?

    Cassandra 不保证原子行为 因此一个副本失败但其他副本确实保留更改的可能性很小 是否有任何信息如何防范这种情况以及如果发生这种情况应采取哪些措施来治愈它 卡桑德拉在这方面能自我治愈吗 Update 我特别关注这样一种情况 您向所有副
  • 如何为 Android 汽车操作系统构建 AOSP?

    我已经从 x86 下载了 AOSP 代码库https www android x86 org https www android x86 org 它构建得很好 我想知道我如何设置config or mk 这样我就可以编译或构建具有 Andr
  • 如何告诉 Valgrind 完全抑制特定的 .so 文件?

    我正在尝试在我正在开发的程序上使用 Valgrind 但 Valgrind 为我正在使用的库之一生成一堆错误 我希望能够告诉它抑制涉及该库的所有错误 我可以为抑制文件提出的最接近的规则是 rule name Memcheck Cond ob
  • javascript: 这个关键字

    I know this指向函数操作的当前对象 所以这是根据定义的代码 function foo alert this output window 所以 现在函数 foo 等于 window foo 但现在在这里 function foo f
  • 为什么这个 Haskell 程序中没有使用尾部调用优化?

    以下程序会破坏堆栈 find first occurrence Eq b gt b gt b gt Int gt Int find first occurrence e i 1 find first occurrence e x xs i
  • *tmp*[[j]] 中的错误:下标超出范围

    抱歉帖子太长 我是 R 新手 一直在努力提高对这门语言的掌握 我偶然发现了这个有趣的足球结果建模项目 http www1 maths leeds ac uk voss projects 2010 sports JamesGardner pd
  • 如何检查某种情况是否持续超过 15 分钟?

    以下是数据集的示例 Date Value 2020 01 01 01 35 50 2020 01 01 01 41 49 2020 01 01 01 46 50 我想检查连续 15 分钟的 值 是否等于 50 如果是 我想提取它发生的日期
  • 触摸事件 (touchesMoved) 不适用于 UIScrollView 内的 UIView

    我有一个UIView里面一个UIScrollView 以及UIViewControllers对于那些没有接收触摸事件的视图 如果我将视图从滚动视图中取出 那么它就可以工作 UserInteraction 在所有视图中都是默认打开的 但它仍然
  • 如何授予特定用户对特定节点的编辑权限?

    如何授予特定用户对特定节点的编辑权限 我有一个名为 学生 的用户角色 多个用户具有该角色 但只有少数用户可以编辑节点 我怎样才能意识到这一点 我将尝试介绍一些用例 以及如何解决它们 If all members of a category
  • 插入行并获取生成的 ID

    我正在尝试使用 Spring 的JdbcTemplate类将行插入到名为的 MySQL 表中transaction并获取生成的ID 相关代码是 public Transaction insertTransaction final Trans
  • 如何使用 Objective C 更改 iOS 设备的系统壁纸/背景?

    我很好奇是否可以通过您自己的应用程序以编程方式更改 iOS 设备的系统壁纸 背景 Apple 不提供公共 API 来执行此操作 用户必须通过 设置 应用程序选择要用作壁纸的图片 您可以让您的应用将图片保存到用户保存的照片中 并指示用户手动更
  • 如何在 Symfony 2.0 中使用元标签

    我不知道如何在我网站的所有页面中添加元标签 正确的 您可以将元标记放入网站的基本布局中 对于更复杂的愿望 您可以将它们放入一个块中 如果您愿意 您可以在特定模板中覆盖它们 有关更多信息 请查看 Symfony2 文档创建和使用模板 http
  • Javascript 正则表达式模式 \W 是否包含空格?

    我正在使用这个表达 W g匹配除数字 字母和空格之外的所有字符 好像是包含空格的 我将如何构建一个不包含空格的正则表达式 a z0 9 s ig 解释 Character class which matches characters NOT
  • 找到沿两个平面相交的线

    我试图在 3D 中绘制由两个平面相交形成的线 但我无法理解数学 这已被解释过here http mathinsight org intersecting planes examples and here http mathworld wol
  • 如何使用 Espresso 点击 Android 图库

    我们目前正在使用 Espresso 测试一个 Android 应用程序 我们要测试的功能之一是从本地图片库中选择图片 图像 我们可以一路调出图库视图 但无法在结果窗口中从 最近 下载 图库 中进行选择 下面包含了我们如何取得如此进展的一个片
  • Watir Webdriver 计算 UL 列表中的项目数量

    我进行了一些搜索 但无法找到合适的答案 基本上我有一个长度不同的无序列表 我想遍历列表 做一些其他事情 然后返回并选择列表中的下一个项目 当我定义循环应该迭代的次数时 我可以很好地做到这一点 因为我知道列表中的项目数量 但是我不想为每个测试
  • python 3,尝试从多个 HID 输入读取,Raspberry Pi

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