我可以想到这样的快速代码。
由于可以通过/ dev / bus / usb / <总线> / <设备>访问所有USB端口
对于生成的ID,即使您拔出设备并重新连接设备,它也可能是其他端口。会是一样的。
import reimport subprocessdevice_re = re.compile("Buss+(?P<bus>d+)s+Devices+(?P<device>d+).+IDs(?P<id>w+:w+)s(?P<tag>.+)$", re.I)df = subprocess.check_output("lsusb")devices = []for i in df.split('n'): if i: info = device_re.match(i) if info: dinfo = info.groupdict() dinfo['device'] = '/dev/bus/usb/%s/%s' % (dinfo.pop('bus'), dinfo.pop('device')) devices.append(dinfo)print devices示例输出如下:
[{'device': '/dev/bus/usb/001/009', 'tag': 'Apple, Inc. Optical USB Mouse [Mitsumi]', 'id': '05ac:0304'},{'device': '/dev/bus/usb/001/001', 'tag': 'Linux Foundation 2.0 root hub', 'id': '1d6b:0002'},{'device': '/dev/bus/usb/001/002', 'tag': 'Intel Corp. Integrated Rate Matching Hub', 'id': '8087:0020'},{'device': '/dev/bus/usb/001/004', 'tag': 'Microdia ', 'id': '0c45:641d'}]针对Python 3更新的代码
import reimport subprocessdevice_re = re.compile(b"Buss+(?P<bus>d+)s+Devices+(?P<device>d+).+IDs(?P<id>w+:w+)s(?P<tag>.+)$", re.I)df = subprocess.check_output("lsusb")devices = []for i in df.split(b'n'): if i: info = device_re.match(i) if info: dinfo = info.groupdict() dinfo['device'] = '/dev/bus/usb/%s/%s' % (dinfo.pop('bus'), dinfo.pop('device')) devices.append(dinfo)print(devices)


