使用Python hidapi读取USB键盘失败,寻求技术帮助
解决Python hidapi读取键盘输入报错的问题
核心问题分析
键盘作为Windows系统的核心输入设备,系统会独占其HID接口,直接通过hidapi调用device.read()会因权限/资源占用问题报错,这是最常见的原因。以下是具体解决办法:
方案1:改用输入钩子库(推荐)
使用pynput这类封装了系统输入钩子的库,绕开系统对HID接口的独占限制,这是最稳定的实现方式。
示例代码:
from pynput import keyboard def on_press(key): try: print(f"按下普通按键: {key.char}") except AttributeError: print(f"按下特殊按键: {key}") def on_release(key): print(f"释放按键: {key}") if key == keyboard.Key.esc: # 按ESC停止监听 return False # 启动监听 with keyboard.Listener(on_press=on_press, on_release=on_release) as listener: listener.join()
安装依赖:
pip install pynput
方案2:尝试通过设备路径打开(不保证成功)
同一个VID/PID可能对应多个HID接口,你当前打开的可能不是目标接口,尝试用设备路径直接打开:
修改原代码的设备打开逻辑:
import hid # 枚举设备(保留原代码用于确认路径) devices = hid.enumerate(0, 0) for device in devices: print("Device:", device) # 用目标设备的path打开 device = hid.device() target_path = b'\\?\HID#VID_0E6A&PID_02C0&MI_01&Col05#7&28db5c83&0&0004#{4d1e55b2-f16f-11cf-88cb-001111000030}\KBD' device.open_path(target_path) # 添加超时参数,避免无限阻塞 try: data = device.read(64, timeout=5000) print("Data:", data) except Exception as e: print(f"读取错误: {e}") finally: device.close()
注意:即使这样操作,Windows仍可能因独占接口拒绝访问,此方案仅作尝试。
方案3:检查hidapi兼容性
确保安装的hidapi与系统架构匹配:
- 卸载现有包:
pip uninstall hidapi
- 重新安装对应版本:
pip install hidapi
内容的提问来源于stack exchange,提问作者rupiman
相关产品推荐
相关产品推荐

