You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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与系统架构匹配:

  1. 卸载现有包:
pip uninstall hidapi
  1. 重新安装对应版本:
pip install hidapi

内容的提问来源于stack exchange,提问作者rupiman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 15:45:32