PyUSB ValueError:Windows 7上没有可用的后端。当pyusb未检测到时,窗口正在检测设备

时间:2016-03-17 04:47:01

标签: python-2.7 libusb pyusb libusb-1.0 libusb-win32

我已尝试过所有可能的方法,但无法解决此错误。有没有人解决过这个问题?

>>> import usb.core
>>> import usb.util
>>> dev=usb.core.find(idVendor=0x04D8)

我得到的错误是:

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    dev=usb.core.find(idVendor=0x04D8)
  File "C:\Python27\lib\site-packages\usb\core.py", line 1199, in find
    raise ValueError('No backend available')
ValueError: No backend available

在它没有显示任何此类问题之前,它最近显示该错误。 尝试在目录C:\ Python27中包含libusb0_x​​86.dll但仍然显示错误。我也为设备驱动程序安装了libusb-win32 inf向导。请这里的任何python专家帮我解决这个错误。

2 个答案:

答案 0 :(得分:0)

首先改变你的第三行。您必须使用idVendor和IdProduct找到您的设备。所以使用这个命令:

dev = usb.core.find(idVendor=0xYYYY, idProduct=0xYYYY)

只需用正确的信息替换YYYY。

另一个可能的问题是,在运行代码时,驱动程序已在使用您的设备。 尝试在管理员中运行您的代码。

答案 1 :(得分:-1)

每当我们使用PyUSB模块与PC进行USB通信时,PyUSB模块将检查 PATH environment variable 中的libusb0.dll和libusb-1.0.dll文件(作为后端)在 C:\windows\System32 位置,然后与USB设备建立通信。由于我使用libusb-win32-wizard创建设备驱动程序,因此使用libusb0.dll。可以使用以下DEBUG程序找到执行过程:

import os
os.environ['PYUSB_DEBUG'] = 'debug'
import usb.core
print list(usb.core.find(find_all=True))

当我在 Shell 中执行上述程序时,我得到的输出是:

2016-03-26 11:41:44,280 ERROR:usb.libloader:'Libusb 1' could not be found
2016-03-26 11:41:44,280 ERROR:usb.backend.libusb1:Error loading libusb 1.0 backend
2016-03-26 11:41:44,280 ERROR:usb.libloader:'OpenUSB library' could not be found
2016-03-26 11:41:44,280 ERROR:usb.backend.openusb:Error loading OpenUSB backend
2016-03-26 11:41:44,280 INFO:usb.core:find(): using backend "usb.backend.libusb0"
2016-03-26 11:41:44,280 DEBUG:usb.backend.libusb0:_LibUSB.enumerate_devices()
2016-03-26 11:41:44,296 DEBUG:usb.backend.libusb0:_LibUSB.get_device_descriptor(<usb.backend.libusb0._usb_device object at 0x0200E530>)
2016-03-26 11:41:44,296 DEBUG:usb.backend.libusb0:_LibUSB.get_device_descriptor(<usb.backend.libusb0._usb_device object at 0x0200E5D0>)
2016-03-26 11:41:44,296 DEBUG:usb.backend.libusb0:_LibUSB.get_device_descriptor(<usb.backend.libusb0._usb_device object at 0x0200E6C0>)
2016-03-26 11:41:44,296 DEBUG:usb.backend.libusb0:_LibUSB.get_device_descriptor(<usb.backend.libusb0._usb_device object at 0x0200E7B0>)
2016-03-26 11:41:44,296 DEBUG:usb.backend.libusb0:_LibUSB.get_device_descriptor(<usb.backend.libusb0._usb_device object at 0x0200E8A0>)
2016-03-26 11:41:44,296 DEBUG:usb.backend.libusb0:_LibUSB.get_device_descriptor(<usb.backend.libusb0._usb_device object at 0x0200E990>)
2016-03-26 11:41:44,296 DEBUG:usb.backend.libusb0:_LibUSB.get_device_descriptor(<usb.backend.libusb0._usb_device object at 0x0200EA80>)
2016-03-26 11:41:44,296 DEBUG:usb.backend.libusb0:_LibUSB.get_device_descriptor(<usb.backend.libusb0._usb_device object at 0x0200EB70>)
[<DEVICE ID 046d:c05a on Bus 000 Address 001>, <DEVICE ID 046d:c31d on Bus 000 Address 002>, <DEVICE ID 046d:c31d on Bus 000 Address 003>, <DEVICE ID 046d:c31d on Bus 000 Address 004>, <DEVICE ID 04d8:feaa on Bus 000 Address 005>, <DEVICE ID 046d:082b on Bus 000 Address 006>, <DEVICE ID 046d:082b on Bus 000 Address 007>, <DEVICE ID 046d:082b on Bus 000 Address 008>]

所以在这里,因为我在find_all=True函数中将参数作为usb.core.find()给出,它返回连接到PC的每个设备ID。同样在前4行中它会出错,因为我们使用了libusb0.dll的lib-usb-win32-wizard,因此在第5行它给了INFO:usb.core:find(): using backend "usb.backend.libusb0",这意味着它使用libusb0.dll与USB设备进行通信。 / p>