稍微玩弄一下PyUSB,看看它是否提供了一些关于我正在使用的WebUSB库找不到我的设备的见解。我用brew install libusb
安装了libusb1 on the Mac via Homebrew
运行lsusb -vv
以获取设备详细信息。还为PyUSB设置了两个环境变量:
export PYUSB_LOG_FILENAME=pysubdebug.log
和export PYUSB_DEBUG=debug
import usb
VENDOR_ID = 0x0483
PRODUCT_ID = 0x5740
DATA_SIZE = 1
device = usb.core.find(idVendor=VENDOR_ID, idProduct=PRODUCT_ID)
>>> device
<DEVICE ID 0483:5740 on Bus 020 Address 014>
>>> device.is_kernel_driver_active(0)
False
>>> device.set_configuration()
Traceback (abridged)
usb.core.USBError: [Errno 19] No such device (it may have been disconnected)
>>> cfg = device.get_active_configuration()
Traceback (abridged)
usb.core.USBError: [Errno None] Configuration not set
从日志文件看,python(位于venv中)似乎正在使用位于/usr/local/lib/
的文件:
2020-10-27 12:20:41,706 DEBUG:usb.backend.libusb1:_LibUSB.__init__(<CDLL '/usr/local/lib/libusb-1.0.dylib', handle 7f8ba652c7f0 at 0x1101a5f70>)
2020-10-27 12:20:41,712 INFO:usb.core:find(): using backend "usb.backend.libusb1"
酝酿文件:
$brew ls libusb
/usr/local/Cellar/libusb/1.0.23/include/libusb-1.0/libusb.h
/usr/local/Cellar/libusb/1.0.23/lib/libusb-1.0.0.dylib
/usr/local/Cellar/libusb/1.0.23/lib/pkgconfig/libusb-1.0.pc
/usr/local/Cellar/libusb/1.0.23/lib/ (2 other files)
/usr/local/Cellar/libusb/1.0.23/share/libusb/ (13 files)
并确认PyUSB正在寻找正确的位置:
ls -l /usr/local/lib/libusb-1.0.dylib
lrwxr-xr-x #details# /usr/local/lib/libusb-1.0.dylib@ -> ../Cellar/libusb/1.0.23/lib/libusb-1.0.dylib
我是否需要为Specify a library by hand创建一个函数?这似乎不是问题所在
也许我遗漏了一个配置步骤
USB用于{}数据传输,似乎更脆弱,更适合平台
例如,我通常可以在任意多个浏览器中加载web应用程序,而USB设备只能由单个设备、应用程序(可能还有进程)来“声明”
我发现了一个名为Serial的(商业)应用程序,通过它我可以(使用免费的演示)确认我的设备是否被“声明”
一些Apple users were able to使用
kextunload
来“解锁”设备在OSX上,
kextstat
终端应用程序提供了关于哪些内核声明哪些设备的一些详细信息:但我不断得到一个错误,它们“正在使用”,无法卸载
最后,我重新启动了计算机,使用良好的USB电缆将USB设备直接插入,多亏了PyUSB tutorial docs和this post,我至少能够使用以下代码从设备中提取一些数据:
看:
明白了
当我第一次尝试
read
时,超时时间太短和/或缓冲区太小,随后的read
请求将返回usb.core.USBError: [Errno 32] Pipe error
我想这是因为python忙于做一些事情,或者需要断开连接。解决方法是使用
exit()
python并使用更高的参数重试相关问题 更多 >
编程相关推荐