使用python列出所有usb大容量存储磁盘

使用python列出所有usb大容量存储磁盘,python,usb,detection,Python,Usb,Detection,我的系统中几乎没有插入USB磁盘。我想列出所有这些问题,如:- /dev/sdb /dev/sdc .... ans so on.. 请记住,我不想在其中列出像/dev/sdb1这样的分区。我正在寻找Linux下的解决方案。尝试了cat/proc/partitions 但它列出了所有的磁盘,无法确定哪一个是USB存储磁盘。我正在寻找一种不需要额外安装软件包的解决方案。在/dev中列出正确的路径: 您可以将Klaus D.的建议转换为Python代码,如下所示: #!/usr/bin/env p

我的系统中几乎没有插入USB磁盘。我想列出所有这些问题,如:-

/dev/sdb
/dev/sdc
.... ans so on..
请记住,我不想在其中列出像/dev/sdb1这样的分区。我正在寻找Linux下的解决方案。尝试了cat/proc/partitions

但它列出了所有的磁盘,无法确定哪一个是USB存储磁盘。我正在寻找一种不需要额外安装软件包的解决方案。

在/dev中列出正确的路径:


您可以将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)
路径包含以下格式的信息: /dev/disk/by path/pci-0000:00:1d.7-usb-0:5:1.0-scsi-0:0:0 这是一个符号链接,因此我们可以使用os.readlink获得伪scsi设备名。 但它以这种格式返回信息: ../../sdc 所以我们使用os.path.basename来清理它

而不是使用 “/dev/”+os.path.basenamelink 您可以使用以下命令生成“/dev/sdc”格式的字符串 os.path.normpathos.path.joinos.path.dirnamepath,链接
但我想你会同意前一种方法更简单

到目前为止你试过什么?是否可以使用lsusb命令,或者是否连接了存储设备以外的其他USB设备?是。有时USB调制解调器也连接了。但我只想列出原始帖子中提到的USB块磁盘。很抱歉延迟。你的剧本看起来不错。但我只需要USB大容量存储磁盘。您的脚本还列出了/dev/sr1,它是一张cdrom。另外,当我检查模式以确定设备是否为大容量存储设备时,它为所有设备(包括cdrom)返回了块。下面是code mode=os.stat/dev/sdb.st_mode print的一部分mode@sundar_ima:简单的解决方案是筛选链接以消除包含“/sr”的条目,或筛选链接以仅包含与“/sd”匹配的条目。
ls -l /dev/disk/by-path/*-usb-* | fgrep -v part
#!/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)