簡體   English   中英

使用python列出所有USB大容量存儲磁盤

[英]Listing all usb mass storage disks using python

我的系統中插入了幾個USB磁盤。 我想列出所有這些人:

/dev/sdb
/dev/sdc
.... ans so on..

請記住,我不想像/dev/sdb1這樣列出分區。 我正在尋找Linux下的解決方案。 嘗試過cat /proc/partitions

major minor  #blocks  name

   8        0  488386584 sda
   8        1   52428800 sda1
   8        2   52428711 sda2
   8        3          1 sda3
   8        5   52428800 sda5
   8        6   15728516 sda6
   8        7  157683712 sda7
   8        8  157682688 sda8
  11        0    1074400 sr0
  11        1      47602 sr1
   8       32    3778852 sdc
   8       33          1 sdc1
   8       37    3773440 sdc5

但是它列出了所有磁盤,無法確定哪一個是USB存儲磁盤。 我正在尋找不需要額外安裝軟件包的解決方案。

/dev列出正確的路徑:

ls -l /dev/disk/by-path/*-usb-* | fgrep -v part

您可以將Klaus D.的建議轉換為Python代碼,如下所示:

#!/usr/bin/env python

import os

basedir = '/dev/disk/by-path/'

print 'All USB disks'

for d in os.listdir(basedir):
    #Only show usb disks and not partitions
    if 'usb' in d and 'part' not in d:
        path = os.path.join(basedir, d)
        link = os.readlink(path)
        print '/dev/' + os.path.basename(link)

path包含以下格式的信息:
/dev/disk/by-path/pci-0000:00:1d.7-usb-0:5:1.0-scsi-0:0:0:0
這是一個符號鏈接,因此我們可以使用os.readlink()獲得偽scsi設備名稱。
但這會以以下格式返回信息:
../../sdc
因此我們使用os.path.basename()進行清理。

而不是使用
'/dev/' + os.path.basename(link)
您可以使用以下命令生成'/dev/sdc'格式的字符串
os.path.normpath(os.path.join(os.path.dirname(path), link))
但我認為您會同意前一種技術更簡單。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM