使用Python 3获取USB设备的序列号

5 投票
1 回答
11277 浏览
提问于 2025-04-18 14:45

我一直在用pyusb这个库来访问通过USB连接的打印机的详细信息。目前我有一段代码可以正常工作,但不同的设备似乎需要不同的索引。以下是我现在的代码:

import usb

dev = usb.core.find(idProduct=0x001f)
print(usb.util.get_string(dev,256,3))

dev2 = usb.core.find(idProduct=0x0009)
print(usb.util.get_string(dev2,256,3))

这段代码对于dev设备运行得很好,可以输出一个序列号,但对于dev2却只输出“Zebra”,也就是制造商的名字。如果我把3改成6或7就可以正常工作,但这样一来,第一个dev就会出错。

在Python 2中,有一个解决办法是使用print(dev.serial_number),但是在Python 3中,serial_number这个属性在pyusb里似乎不存在。

有没有办法让这个在所有设备上都能可靠地工作呢?谢谢。

1 个回答

7

对于现在的PyUSB版本1.0.2,我找到了解决这个问题的正确写法是:

import usb

dev = usb.core.find(idProduct=0x001f)
print( usb.util.get_string( dev, dev.iSerialNumber ) )

dev2 = usb.core.find(idProduct=0x0009)
print( usb.util.get_string( dev2, dev2.iSerialNumber ) )

撰写回答