9

如何在 Linux 中获取可移动驱动器(插入 USB)的列表?如果可以使事情变得更容易,我可以使用 KDE、GNOME 或其他 DE 库。

4

5 回答 5

5

我认为一个好主意是使用python 的udev 接口

小例子(当然在你的情况下你已经调整了一些过滤):

In [1]: import pyudev
In [2]: pyudev.Context()
In [3]: ctx = pyudev.Context()
In [4]: list(ctx.list_devices(subsystem='usb'))
Out[4]: 
[Device(u'/sys/devices/pci0000:00/0000:00:1a.0/usb2'),
 Device(u'/sys/devices/pci0000:00/0000:00:1a.0/usb2/2-0:1.0'),
 Device(u'/sys/devices/pci0000:00/0000:00:1a.0/usb2/2-2'),

在大多数情况下,这是一个好方法,因为新系统使用 udev。

于 2012-11-22T00:28:23.313 回答
2

过了这么久,问题又被解开了……</p>

最后,我通过 D-Bus 接口使用了 UDisk,如下所示

于 2012-12-07T22:56:29.103 回答
0

这是我在 bash 中使用的:lsblk --pairs --nodeps | grep 'RM="1"'

示例输出:NAME="sda" MAJ:MIN="8:0" RM="1" SIZE="59.5G" RO="0" TYPE="disk" MOUNTPOINT=""

请注意,它列出的是设备,而不是其分区。如果您还想查看分区,请使用 lsblk --pairs | grep 'RM="1"'

于 2022-01-06T01:41:24.940 回答
0

有时回来我得到了这个小脚本(它不是我的),但它确实帮助了我很多,仅供参考

#!/usr/bin/python
import sys
import usb.core
# find USB devices
dev = usb.core.find(find_all=True)
# loop through devices, printing vendor and product ids in decimal and hex
for cfg in dev:
      try:
              #print dir(cfg)
              sys.stdout.write('Decimal VendorID=' + str(cfg.idVendor) + ' & ProductID=' + str(cfg.bDeviceClass) + '  ' + str(cfg.product) + ' ' + str(cfg.bDeviceSubClass)+ '  ' + str(cfg.manufacturer)+'\n')
      except:
              print 
于 2017-08-09T11:06:16.207 回答
-1

有什么理由不只是解析结果lsusb吗?我敢肯定有这方面的模块,但话又说回来,简单有时是最好的。

我无法用 Python 帮助你,在 Perl 中我可能会这样做:

#!/usr/bin/env perl

use strict;
use warnings;

my @data;
foreach (`lsusb`) {
  next unless /Bus (\S+) Device (\S+): ID (\S+) (.*)/;
  push @data, { bus => $1, device => $2, id => $3, info => $4 };
}

use Data::Printer;
p @data;

在我的电脑上,这会导致

[
    [0] {
        bus   005,
        device   001,
        id   "1d6b:0001",
        info   "Linux Foundation 1.1 root hub"
    },
    [1] {
        bus   004,
        device   001,
        id   "1d6b:0001",
        info   "Linux Foundation 1.1 root hub"
    },
    [2] {
        bus   003,
        device   001,
        id   "1d6b:0001",
        info   "Linux Foundation 1.1 root hub"
    },
    [3] {
        bus   002,
        device   001,
        id   "1d6b:0001",
        info   "Linux Foundation 1.1 root hub"
    },
    [4] {
        bus   001,
        device   003,
        id   "0bda:0158",
        info   "Realtek Semiconductor Corp. USB 2.0 multicard reader"
    },
    [5] {
        bus   001,
        device   002,
        id   "064e:a129",
        info   "Suyin Corp. "
    },
    [6] {
        bus   001,
        device   001,
        id   "1d6b:0002",
        info   "Linux Foundation 2.0 root hub"
    }
]

请注意,Data::Printer它的p功能是人性化的对象转储,仅用于检查目的。

于 2012-11-22T00:37:36.427 回答