如何在linux中获取所有插入设备的USB ID

问题描述 投票:1回答:2

我正在尝试制作一个在后台运行的Python脚本,并检查所有插入设备的USB ID,看它是否与识别的ID列表匹配。这将在Linux环境中运行,最好是Python 2.x.

我知道在Linux中我可以在shell中运行lsusb或通过os.system()运行它,这将给我这个输出:

Bus 003 Device 009: ID 046d:c534 Logitech, Inc. Unifying Receiver
Bus 003 Device 007: ID 046d:082b Logitech, Inc. Webcam C170
Bus 003 Device 005: ID 1532:0043 Razer USA, Ltd 
Bus 003 Device 010: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 003 Device 008: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 003 Device 006: ID 0424:2137 Standard Microsystems Corp. 
Bus 003 Device 004: ID 0451:8044 Texas Instruments, Inc. 

但是,正如您所看到的,这会返回比我需要的信息更多的信息,并且过滤这将很困难并且需要更多时间。我需要的是这样的:

046d:c534
046d:082b
1532:0043
05e3:0608
05e3:0608
0424:2137
0451:8044

为了尽可能快地保持这个脚本,我是否可以通过某种方式向系统运行命令并获取插入的所有内容的USB ID,或者使用grep或Python中的类似内容以某种方式过滤它?

提前致谢!

linux shell usb python-2.x
2个回答
0
投票

这会解决你的问题吗?

guru@dileant:~$ lsusb
Bus 002 Device 002: ID 8087:8001 Intel Corp. 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 005 Device 003: ID 2687:fb01  
Bus 005 Device 002: ID 0a5c:21e8 Broadcom Corp. BCM20702A0 Bluetooth 4.0
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:8009 Intel Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

以下解决方案使用sed(流编辑器)仅打印输出的相关部分。该程序使用类似perl的语法来进行字符串替换。因此,命令行通常具有以下形式:sed <flags> 's/<find>/<replace>/g'

最后,sed使用\( \)来表示正则表达式组。如果要保留输入模式的某些部分,可以使用正则表达式组。

因此,如果您需要总线和设备号,您可以:

guru@dileant:~$ lsusb | sed -e 's/Bus \([0-9]\+\) Device \([0-9]\+\).*/\1:\2/g'
002:002
002:001
006:001
005:003
005:002
005:001
001:002
001:001

同样,如果您需要供应商和产品ID,您可以:

guru@dileant:~$ lsusb | sed -e 's/.*ID \([a-f0-9]\+:[a-f0-9]\+\).*/\1/g'
8087:8001
1d6b:0002
1d6b:0003
2687:fb01  
0a5c:21e8
1d6b:0002
8087:8009
1d6b:0002

1
投票

PyUSB拥有您需要的功能以及更多功能。

您可以使用以下代码(与Python2和Python3兼容)枚举当前连接的所有设备:

import usb.core
for dev in usb.core.find(find_all=True):
  print("%0.4X:%0.4X" % (dev.idVendor, dev.idProduct))

dev对象将具有VID,PID和所有其他设备属性。示例输出:

046D:C016
413C:2107
8087:0024

如果想要与USB设备进行交互,他们还会得到tutorial

© www.soinside.com 2019 - 2024. All rights reserved.