当前位置: 首页 > 面试题库 >

在Python中查询连接的USB设备信息的简单方法?

唐钊
2023-03-14
问题内容

我们如何在Python中查询连接的USB设备信息?我想获取UID设备名称(例如:SonyEricsson W660),设备路径(例如:/ dev /
ttyACM0)

在重新连接设备时,上述信息中最好的参数是什么来用作识别设备?(UID?)

我正在使用Ubuntu 11.04。

ATM我有此代码(使用pyUSB)

busses = usb.busses()
for bus in busses:
  devices = bus.devices
  for dev in devices:
    print repr(dev)
    print "Device:", dev.filename
    print "  idVendor: %d (0x%04x)" % (dev.idVendor, dev.idVendor)
    print "  idProduct: %d (0x%04x)" % (dev.idProduct, dev.idProduct)
    print "Manufacturer:", dev.iManufacturer
    print "Serial:", dev.iSerialNumber
    print "Product:", dev.iProduct

问题是我没有得到想要的输出,将粘贴一个示例:

<usb.legacy.Device object at 0x1653990>
Device: 
  idVendor: 4046 (0x0fce)
  idProduct: 53411 (0xd0a3)
Manufacturer: 1
Serial: 3
Product: 2

首先,我没有文件名,这对我来说最重要。我假设它是/ dev /
ttyACM0等部分。其次,我猜每个USB设备都有一些UID,还是应该同时使用供应商或产品ID?

编辑:显然我有一些设置问题,我认为我使用了错误的USB库。
(使用libusb0.1)ATM。这就是为什么我将Device(dev.filename)字符串留空的原因。如果有人可以告诉我,他在什么操作系统上使用什么USB库和哪个版本的PyUSB,我认为它将解决我的问题。


问题答案:

我可以想到这样的快速代码

由于可以通过/ dev / bus / usb / <总线> / <设备>访问所有USB端口

对于生成的ID,即使您拔出设备并重新连接设备,它也可能是其他端口。会是一样的。

import re
import subprocess
device_re = re.compile("Bus\s+(?P<bus>\d+)\s+Device\s+(?P<device>\d+).+ID\s(?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'}
]
import re
import subprocess
device_re = re.compile(b"Bus\s+(?P<bus>\d+)\s+Device\s+(?P<device>\d+).+ID\s(?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)


 类似资料:
  • 有没有办法打开tcpip端口5555进行调试,而不需要通过USB连接到电脑?

  • 我正在尝试检测已经连接到android的usb设备。我知道有动作可以检测USB何时连接或断开。但是我真的不知道如何在将usb设备连接到android后检查设备。另外,我发现每个USB设备都有它的设备类别代码,但是我怎么知道连接的是哪种设备呢?例如,我需要检测usb鼠标和键盘;我如何区分它们?

  • 需要说明的是,这款设备没有被锁定或任何东西,它非常适合我的朋友,他也有同样的android studio版本。问题不在于检测usb设备(通过电脑),我可以完美地访问设备的内容,因此它可以正确地连接到我的电脑,但不能连接到android studio。当我试图运行一个应用程序时,usb设备没有出现在选项中。有人能帮我解决这个问题吗,我的android工作室正在更新。 更新:我使用的设备是:三星J2和

  • python 怎么实现监控电脑是否有usb或其他可移动设备插入,最好也能检测手机插入。 用来在办公室里防止usb设备插入内部电脑里、 试过是做了一个pyqt的程序,然后开机后读取当前盘符,并保存下来,如果出现新的盘符就报错然后提醒用户拔掉,但是这样显然是有bug。 国内暂时没有特别靠谱的解决方法。

  • 问题内容: 我创建了一个包含Android SDK的Docker映像,并试图将我的Android手机暴露在运行该映像的容器中。因此,我使用该标志并按如下所示安装USB设备: 但是,当我运行ADB设备时,它不会显示USB设备: 容器内的lsusb列出了设备: 但是,该设备在主机上可见: 主机操作系统 Docker版本 可能是什么问题? 问题答案: 我认为设备上运行的ADB守护程序无法连接到两个ADB

  • 本文向大家介绍在linux下实现 python 监控usb设备信号,包括了在linux下实现 python 监控usb设备信号的使用技巧和注意事项,需要的朋友参考一下 1. linux下消息记录 关于系统的各种消息一般都会记录在/var/log/messages文件中,有些主机在中默认情况下有可能没有启用,具体配置方法可参考下面这篇博客: 系统日志配置 /var/log/messages 2. p