【发布时间】:2022-09-30 19:30:56
【问题描述】:
我正在尝试创建所有 USB 大容量存储设备及其供应商、ProductId 和序列号的列表。
因此我使用 pyUsb 模块并运行以下程序。
import sys
import usb
import usb.core
import usb.util
devs = usb.core.find(find_all=True)
nCount=0
for dev in devs:
try:
for cfg in dev:
intf = usb.util.find_descriptor(cfg,bInterfaceClass=0x8)
if intf is not None:
nCount += 1
try:
sys.stdout.write(\"USB device \" + usb.util.get_string(dev,dev.iProduct,None) + \'\\n\')
except:
sys.stdout.write(\"USB device \" + str(nCount) + \'\\n\')
sys.stdout.write(\"------\" + \'\\n\')
sys.stdout.write(\"VendorId = \" + hex(dev.idVendor) + \'\\n\')
sys.stdout.write(\"ProductId = \" + hex(dev.idProduct) + \'\\n\')
if not dev.iSerialNumber == 0:
sys.stdout.write(\"SerialNbr = \" + usb.util.get_string(dev,dev.iSerialNumber,None) + \'\\n\')
else:
sys.stdout.write(\"SerialNbr = none\" + \'\\n\')
sys.stdout.write(\'\\n\')
except usb.core.USBError:
pass
通常脚本有效。根据设备,我得到如下输出:
USB device USB DISK
-------
VendorId = 0x90c
ProductId = 0x2000
SerialNbr = none
但是对于各种设备,我收到以下错误:
文件 \"C:\\Users\\UerXy\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\usb\\backend\\libusb1.py\", 第 600 行,在 _check raise NotImplementedError(_strerror(ret)) NotImplementedError:此平台上不支持或未实现的操作
调试代码时,尝试使用函数 usbutil.get_string() 读取字符串描述符时发生错误
我在某处读到,该功能取决于驱动程序。 这是真的?是否可以在不关心使用过的 USB 驱动程序的情况下读取任何给定 USB 设备的序列号?
如何解决此错误并从每个设备读取描述符?
-
该问题仅出现在 Windows 平台上。 ubuntu 系统中的相同代码适用于所有设备。有任何想法吗?
标签: python windows usb libusb pyusb