我希望能够获取设备名称(例如:/dev/disk2
)并确定它的安装位置(如果有的话)(例如:/mnt/cdrom
> 或 Python 中的 /Volumes/RANDLABEL
)。
我可以做到这一点的一种方法是运行 df
或 mount
然后解析输出,但这看起来很俗气和不可靠。例如,mount
使用 "on "
作为设备和挂载点之间的分隔符。虽然不太可能,但其中任何一个都可能包含该字符串,从而使输出不明确。
在 Linux 上我可以读取 /proc/mounts
,但是这在 Mac OS X 上不起作用,例如。
所以我正在寻找一种以可靠(即:可以处理任意(合法)设备/挂载点名称)并且“尽可能便携”的方式找到设备的挂载点的方法。 (我猜测可能无法移植到 Windows——我不确定它是否有类似的设备挂载点概念。)我特别想要在 Linux 和 OS X 上都能工作的东西。
最佳答案
确实没有可移植的方法来执行此操作,因此您需要处理特定于平台的代码。
在 OS X 上,在命令级别获取磁盘卷信息的最简单和最可靠的方法是对 diskutil list
使用 -plist
选项。然后可以使用 pliSTLib
模块在 Python 中直接处理输出。例如:
diskutil list -plist | \
python -c 'import sys,plistlib,pprint; pprint.pprint(plistlib.readPlist(sys.stdin))'
{'AllDisks': ['disk0', 'disk0s1', 'disk0s2', 'disk0s3', 'disk1'],
'AllDisksAndPartitions': [{'Content': 'GUID_partition_scheme',
'DeviceIdentifier': 'disk0',
'Partitions': [{'Content': 'EFI',
'DeviceIdentifier': 'disk0s1',
'Size': 209715200},
{'Content': 'Apple_CoreStorage',
'DeviceIdentifier': 'disk0s2',
'Size': 499248103424},
{'Content': 'Apple_Boot',
'DeviceIdentifier': 'disk0s3',
'Size': 650002432,
'VolumeName': 'Recovery HD'}],
'Size': 500107862016},
{'Content': 'Apple_HFSX',
'DeviceIdentifier': 'disk1',
'MountPoint': '/',
'Size': 499097100288,
'VolumeName': 'main'}],
'VolumesFromDisks': ['main'],
'WholeDisks': ['disk0', 'disk1']}
关于python - 在 Python 中从设备名称映射到挂载点的可靠和 "as portable as possible"方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8785217/