在 macOS 上,是否可以为 python 程序保留来自 HID 的输入?

On macOS, is it possible to reserve input from an HID for a python program?

我想向 Python 3.6 程序授予对来自激光条码(点和触发器类型)reader 的输入的独占访问权;也就是说,无论 UI 焦点如何,其他程序都不应该从 reader 获取输入(因为 python 程序已经只为自己声明了该设备。)

我已经能够在 Linux 机器上使用 Python 3.6 和 pyusb 库很好地做到这一点,但我无法在 macOS 中复制功能,我收到一条错误消息我没有足够的权限。

这实际上也发生在 Linux 中,但可以通过将当前用户添加到 dialout 组并在 /etc/udev/rules.d/99-usb.rules 中创建 udev 规则文件授予用户权限来轻松解决或按此规则分组:

SUBSYSTEMS=="usb", ENV{DEVTYPE}=="usb_device", GROUP="dialout", MODE="0666"

如何在 macOS 上授予等效权限?

示例代码在 Linux 上完全符合我的要求,但在 macOS 上完全失败:

import usb.core
import usb.util
device = usb.core.find(idVendor=0x0519, idProduct=0x2017)
if device.is_kernel_driver_active(0):
    device.detach_kernel_driver(0)
    print("Kernel driver detached")
else:
    print("Kernel driver already detached")
try:
    device.set_configuration()
    device.reset()
    usb.util.claim_interface(device, 0) # error happens here
    print("Claimed device")
except Exception as e:
    print("Error when claiming device", e)
    sys.exit(1)

根据我在网上找到的信息,macOS 似乎没有授予此访问权限的等效机制。

macOS 上的错误:

[Errno 13] Access denied (insufficient permissions)

根据我最初发布此问题后了解到的情况,您可以保留来自任何 USB 设备的输入,只要它支持 "serial mode",如果您设备可以切换到此模式,然后 OS 可以将其与默认 HID 模式区别对待,并且您将能够获取它的输入,甚至是唯一的。

免责声明:

在发布此答案时,我还没有机会对此进行全面测试。只是想向任何感兴趣的人提供快速更新。