我已经尝试了所有可能的方法,但无法摆脱此错误。有人解决了这个问题吗?
>>> 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:Python27libsite-packagesusbcore.py", line 1199, in find
raise ValueError('No backend available')
ValueError: No backend available
在它没有显示任何此类问题之前,它最近显示该错误。尝试在目录C:\Python27中包含libusb0_x86.dll,但仍然显示错误。我还为设备驱动程序安装了libusb-win32 inf向导。请这里的任何 python 专家帮助我解决此错误。
首先更改您的第三行。您必须通过 idVendor 和 IdProduct 找到您的设备。所以使用以下命令:
dev = usb.core.find(idVendor=0xYYYY, idProduct=0xYYYY)
只需将 YYYY 替换为正确的信息即可。
另一个可能的问题是,当您运行代码时,驱动程序已在使用您的设备。尝试在管理器中运行代码。
PC 进行 USB 通信时,PyUSB 模块都会检查 libusb0.dll 和 libusb-1.0.dll 文件(充当后端)在PATH environment variable
和C:windowsSystem32
位置,然后与 USB 设备建立通信。由于我使用 libusb-win32 向导来创建设备驱动程序,因此它使用 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 的 lib-usb-win32-wizard.dll因此在第 5 行中它给出了INFO:usb.core:find(): using backend "usb.backend.libusb0"
这意味着它使用 libusb0.dll 与 USB 设备通信。