Вывод списка всех USB-накопителей в Linux - PullRequest
9 голосов
/ 06 мая 2011

Как я могу получить список съемных дисков (подключенных к USB) в Linux? Я в порядке с использованием KDE, GNOME или других библиотек DE, если это облегчит задачу.

Ответы [ 4 ]

5 голосов
/ 22 ноября 2012

Думаю, хорошая идея - использовать интерфейс udev из python.

Небольшой пример (конечно, в вашем случае вы настроили некоторую фильтрацию):

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.

2 голосов
/ 08 декабря 2012

По прошествии всего этого времени вопрос снова был разблокирован ...

В конце концов, я использовал UDisks через интерфейс D-Bus, как показано здесь .

0 голосов
/ 09 августа 2017

Какое-то время назад я получил этот небольшой скрипт (он не мой), но он, безусловно, очень помог мне, поставив только для справки

#!/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 
0 голосов
/ 22 ноября 2012

Есть ли причина не просто анализировать результаты lsusb?Я уверен, что для этого есть модули, но, опять же, иногда лучше просто.

Я не могу помочь вам с Python, в Perl я мог бы сделать:на моем компьютере результаты

[
    [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 являются дружественным для человека дампом объекта только для целей проверки.

...