Python:跨平台可用的存储设备列表

8
有没有一种方法可以在Python中获取已连接的存储设备列表,例如相机、SD卡和外部硬盘?

1
你如何定义“存储设备”?如何“连接”? - user647772
@Tichodroma 在 Mac Finder、Windows Explorer 或 Ubuntu 文件浏览器中出现的外部设备列表。 - Adam Matan
1
我也不介意找到内部驱动器 - 所以定义并不那么重要。 - Adam Matan
1个回答

5
以下内容适用于Linux和Windows。这将列出所有驱动器,而不仅仅是外部驱动器!
import subprocess
import sys

#on windows
#Get the fixed drives
#wmic logicaldisk get name,description
if 'win' in sys.platform:
    drivelist = subprocess.Popen('wmic logicaldisk get name,description', shell=True, stdout=subprocess.PIPE)
    drivelisto, err = drivelist.communicate()
    driveLines = drivelisto.split('\n')
elif 'linux' in sys.platform:
     listdrives=subprocess.Popen('mount', shell=True, stdout=subprocess.PIPE)
     listdrivesout, err=listdrives.communicate()
     for idx,drive in enumerate(filter(None,listdrivesout)):
         listdrivesout[idx]=drive.split()[2]
# guess how it should be on mac os, similar to linux , the mount command should 
# work, but I can't verify it...
elif 'macosx' ...
     do the rest....

上述Linux方法非常简单,而且会返回像sysprocfs等驱动器,如果您需要更精细的内容,请查看使用python-dbus查询的内容。


1
如果您添加一个步骤来检测哪些挂载点是当前用户(大概是桌面登录用户)拥有的,那么列表将非常接近“外部设备”的列表。您应该能够先卸载您想要拔掉的设备。 - 9000
1
这里有一个使用DBus调用Udisks的例子。属性DeviceIsRemovable可能是相关的。链接:https://dev59.com/RlTTa4cB1Zd3GeqPtIe1#5081937。 - jfs
1
你可以直接读取Linux上的/proc/mounts,无需生成其他内容。 - LtWorf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接