列出Linux中的所有USB驱动器

时间:2011-05-06 12:30:47

标签: python linux usb removable-drive

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

4 个答案:

答案 0 :(得分:4)

我认为一个好主意是使用python中的udev interface

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

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。

答案 1 :(得分:2)

在这段时间之后,这个问题又被解锁了......

最后,我通过D-Bus接口使用了UDisks,如here所示。

答案 2 :(得分: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 

答案 3 :(得分:-1)

有什么理由不解析lsusb的结果?我确信有这方面的模块,但是再一次,简单有时候最好。

我无法帮助你使用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函数是人性友好的对象转储,仅供检查。