python - 在 Python 中从设备名称映射到挂载点的可靠和 "as portable as possible"方式

标签 python linux macos unix

我希望能够获取设备名称(例如:/dev/disk2)并确定它的安装位置(如果有的话)(例如:/mnt/cdrom > 或 Python 中的 /Volumes/RANDLABEL)。

我可以做到这一点的一种方法是运行 dfmount 然后解析输出,但这看起来很俗气和不可靠。例如,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/

相关文章:

android - 如何在shell(终端)中执行monkeyrunner命令

objective-c - OSX cocoa 应用程序 : Which method for rescaling an image is best with respect to image quality?

python - 如何在 AWS Glue 中正确重命名动态数据帧的列?

python - 一次熔化和过滤 Pandas 数据框

linux - 在 Bash 脚本 for 循环中迭代 IPv6 地址列表

python - 如何从网络 Windows 目录获取文件并移动到我的 Python Django 项目目录?

linux - 恢复 Snow Leopard 上文档的符号链接(symbolic link)

python - 如何使用 scikit 对具有大量潜在值的文本进行准确分类?

python - 查找字典值列表的交集

linux - Windows 使用 Kerberos 作为默认身份验证机制。 Unix/Linux 和 Mac 的默认身份验证机制是哪一种?