如何仅获取 linux 中所有插入设备的 USB ID
How to get just USB IDs of all plugged in devices in linux
我正在尝试制作一个 Python 脚本,该脚本 运行 在后台运行并检查所有插入设备的 USB ID,看它是否与识别的 ID 列表相匹配。这将是 运行 在 Linux 环境中,最好是 Python 2.x
我知道在 linux 中我可以 运行 lsusb
在 shell 或 运行 中通过 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.
但是,正如您所看到的,returns 提供的信息比我需要的多,过滤这些信息会很困难,而且会花费更多时间。我需要的是这样的:
046d:c534
046d:082b
1532:0043
05e3:0608
05e3:0608
0424:2137
0451:8044
为了让这个脚本尽可能快,有什么方法可以 运行 向系统发出命令并仅取回所有插入的 USB ID,或者使用 grep
或 Python 中的类似内容以某种方式过滤它?
提前致谢!
这会解决您的问题吗?
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-like 语法进行字符串替换。因此,命令行通常采用以下形式:sed <flags> 's/<find>/<replace>/g'
.
最后,sed
使用 \( \)
表示正则表达式组。当您想要保留输入模式的某些部分时,您可以使用正则表达式组。
因此,如果您想要总线和设备编号,您可以这样做:
guru@dileant:~$ lsusb | sed -e 's/Bus \([0-9]\+\) Device \([0-9]\+\).*/:/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]\+\).*//g'
8087:8001
1d6b:0002
1d6b:0003
2687:fb01
0a5c:21e8
1d6b:0002
8087:8009
1d6b:0002
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
他们还有一个 tutorial,如果有人想与 USB 设备交互
我正在尝试制作一个 Python 脚本,该脚本 运行 在后台运行并检查所有插入设备的 USB ID,看它是否与识别的 ID 列表相匹配。这将是 运行 在 Linux 环境中,最好是 Python 2.x
我知道在 linux 中我可以 运行 lsusb
在 shell 或 运行 中通过 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.
但是,正如您所看到的,returns 提供的信息比我需要的多,过滤这些信息会很困难,而且会花费更多时间。我需要的是这样的:
046d:c534
046d:082b
1532:0043
05e3:0608
05e3:0608
0424:2137
0451:8044
为了让这个脚本尽可能快,有什么方法可以 运行 向系统发出命令并仅取回所有插入的 USB ID,或者使用 grep
或 Python 中的类似内容以某种方式过滤它?
提前致谢!
这会解决您的问题吗?
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-like 语法进行字符串替换。因此,命令行通常采用以下形式:sed <flags> 's/<find>/<replace>/g'
.
最后,sed
使用 \( \)
表示正则表达式组。当您想要保留输入模式的某些部分时,您可以使用正则表达式组。
因此,如果您想要总线和设备编号,您可以这样做:
guru@dileant:~$ lsusb | sed -e 's/Bus \([0-9]\+\) Device \([0-9]\+\).*/:/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]\+\).*//g'
8087:8001
1d6b:0002
1d6b:0003
2687:fb01
0a5c:21e8
1d6b:0002
8087:8009
1d6b:0002
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
他们还有一个 tutorial,如果有人想与 USB 设备交互