是否可以使用 PyUSB 通过 USB 端口获取 USB 设备

Is it possible to get USB device by USB port using PyUSB

我有很多与 STM32 VCP 相同的设备。 Windows 8.1 为设备创建串行COM 端口。如果我将一台设备连接到任何 PC USB 端口,windows 将绑定到同一个 COM 端口。第二个设备连接到其他 USB 端口后,将创建下一个具有不同串行 COM 号的 COM 端口。如果我拔下这些设备并以不同的顺序连接,COM 端口将在设备之间切换。这是个问题,因为我每次都需要(物理上)相同顺序的 COM 端口顺序。 使用 USBlyzer 软件,我可以看到每个物理 USB 端口的某种 USB 端口号是不同的:

所以我想通过端口号访问(获取当前设备)这些设备。或者列出所有设备并从设备对象中获取此端口号?

在libusb文档中发现有这样一个方法:

uint8_t libusb_get_port_number (libusb_device *开发)
获取设备连接的端口号。

link: http://libusb.sourceforge.net/api-1.0/group__dev.html

也许 PyUSB 也有...

找到了解决我的问题的其他方法。使用 windows DeviceManager API 从位置信息和带有 COM 端口号的设备的友好名称中获取端口号和集线器号(USB 物理标识)。正在解析此信息并获得串行通信的信息。

from infi.devicemanager import DeviceManager
dm = DeviceManager()
dm.root.rescan()

devices = dm.all_devices


for i in devices:
    try:
        print '{} : address: {}, bus: {}, location: {}'.format(i.friendly_name, i.address, i.bus_number, i.location)
    except Exception:
        pass