在 Python 中从设备名称映射到挂载点的可靠且“尽可能便携”的方式

2024-01-03

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

我可以做到这一点的一种方法是运行df or mount然后解析输出,但这看起来很俗气且不可靠。例如,mount uses " on "作为设备和安装点之间的分隔符。虽然可能性很小,但其中任何一个都可能包含该字符串,从而使输出不明确。

在 Linux 上我可以阅读/proc/mounts,但这不适用于 Mac OS X 等。

因此,我正在寻找一种方法,以可靠的方式找到设备的安装点(即:可以处理任意(合法)设备/安装点名称)并且“尽可能便携”。 (我猜测 Windows 的可移植性可能是不可能的——我不确定它是否有类似的设备安装点概念。)我特别想要一些可以在 Linux 和 OS X 上运行的东西。


实际上没有一种可移植的方法可以做到这一点,因此您需要处理特定于平台的代码。

在 OS X 上,在命令级别获取磁盘卷信息的最简单、最可靠的方法是使用-plist选项diskutil list。然后可以使用 Python 直接处理输出plistlib模块。例如:

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']}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Python 中从设备名称映射到挂载点的可靠且“尽可能便携”的方式 的相关文章

随机推荐

  • 设置 Nimbus 按钮的“背景”

    我正在开发一个使用 Nimbus 外观和感觉的应用程序 有一个表 一列包含按钮 使用Rob Camick 的表格按钮列 http tips4java wordpress com 2009 07 12 table button column
  • Mac 终端无法识别波形符

    我在运行 OS X Lion 的 Mac 上遇到了这种奇怪的情况 其中 波形符 不会进入我的用户目录 相反 当我输入 cd 时 我得到 bash cd No such file or directory 关于如何解决这个问题有什么建议吗 将
  • 远程 Neo4j Web 控制台

    我在 Cent OS 机器上使用 Neo4j 2 0 服务器 这需要从基于 Web 的远程控制台进行访问 在数据库中 服务器数据位置指向包含数据的文件夹 当我启动数据库并尝试从远程计算机访问它时 数据不显示 这可能是什么原因 我在 Wind
  • 为什么 FOR 循环中的 connect by 表达式只执行一次?

    我刚刚发现 PLSQL 与 Oracle 中的 SQL 的行为有点出乎我的意料 如果我在 SQLDeveloper 上运行此查询 我会得到 5 个结果 select level lvl from dual connect by level
  • 还有一个无法加载文件或程序集“EntityFramework”

    现在 我保证我已经用谷歌搜索过这个 堆栈溢出大约有 4 或 5 个解决方案来解决这个问题 尽管如此 它们似乎都不起作用 我正在将 EntityFramework 5 4 4 与 MVC 3 项目一起使用 过去这工作得很好 但自从我打开该项目
  • UITextField SecureEntryText 颜色更改

    我有一个子类UITextField我将文本颜色设置为白色 我将此子类用于电子邮件字段和密码字段 void drawRect CGRect rect super drawRect rect self clearButtonMode UITex
  • 基于 Javascript 的重定向:会损害 SEO 吗?

    我最近实施了一项修复 根据用户是否启用了 JavaScript 来创建单独的登陆页面 基本上它的工作方式是这样的 默认页面是没有 javascript 的 HTML 页面 网站的基本版本 登陆后 有一个脚本显示如果启用了 javascrip
  • 如何使用盆地跳跃写入参数范围?

    我很难在其中写入参数的界限basinhopping x0 a b c a 0 100 b 0 0 100 c 0 10 from scipy optimize import basinhopping minimizer kwargs met
  • 使用 clang 内置函数与标准函数的优点

    Clang 和 GCC 定义了一堆内置函数 我将在这里使用余数的示例 builtin sqrt x 然而 标准 C99 定义了以下内容math h sqrt x clang 为已经存在的方法定义内置函数有什么意义 我本以为常见的数学函数 例
  • 使用函子派生类函数的广义新类型

    我正在开发一个表示键 值映射的类 并且我有一个基本上类似于alterF https hackage haskell org package containers 0 5 11 0 docs Data Map Strict html v al
  • 小数或空白的正则表达式

    很抱歉这个可能很愚蠢的问题 但我正在尝试整理一个正则表达式 该表达式允许 小数点前有 1 或 2 个数字 小数点后有 0 6 个数字 但是 如果需要的话 我还需要允许该字段为空 有效示例 0 952321 1 20394 12 12 25
  • 如何使用 start 在 alpine docker 容器中加载 shell 别名

    我编写了一个 DOCKER 文件 它使用私有改编的 alpine 图像作为图像 其中包含 nginx 服务器 注意 alpine 使用 zsh 而不是 bash 当我在容器中工作时 我喜欢有一些可用的 shell 别名 当它们丢失时 它会让
  • 如何避免偶尔损坏的下载

    我的网站托管一个用户需要下载的 msi 文件 该文件没有什么特别的 它位于网络服务器上的一个目录中 并有一个指向它的常规 HREF 用户可以单击该目录 有时 用户会抱怨他们无法打开 msi 文件 因为 Windows Installer 声
  • 错误:26 - 定位指定的服务器/实例时出错。 (无法从我的主机服务器连接到我的本地数据库)

    我之前已经问过这个问题了 但是没有很好的答复 我的问题是我的 app data 文件夹中有一个本地数据库 aspnetdb mdf 这里是 web config 中的连接字符串
  • 无法修改我的脚本来限制抓取时的请求数量

    我用 python 编写了一个脚本Thread同时处理多个请求并更快地进行抓取过程 该脚本正在相应地完成其工作 简而言之 抓取工具的作用是 它解析从登陆页面通向其主页 存储信息的位置 的所有链接并抓取happy hours and feat
  • org.hibernate.exception.ConstraintViolationException:无法执行语句

    所以情况是这样的 我正在使用 struts2 和 hibernate 创建一个 web 应用程序 我正在创建一个更改密码页面 用户可以通过该页面更改其密码 但我收到错误为 org hibernate exception Constraint
  • 从 Linux 命令行为视频添加水印

    有谁知道如何使用简单的工具从 Linux 命令行为视频添加水印 当前版本不支持 ffmpeg 中的水印 需要自定义编译 Max ffmpeg y i inputFile mpg vhook usr lib vhook watermark s
  • 点选择器 event_handler 在 matplotlib 中绘制线并显示坐标

    我有下面的类 它通过 y 轴绘制一条垂直线 这样当我单击它时 就会在该位置绘制一条水平线 我的目标是让 y 坐标实际打印在绘制水平线的 y 轴上 为了进行测试 我尝试使用 y 坐标打印标题 但它没有按预期工作 我真正想要完成的是使条形图上的
  • 循环遍历 $_POST 变量

    抱歉 我找不到这个问题的合适标题 我使用 for 循环生成了以下内容 并使用以下模式连接了提交按钮的名称 提交 编辑 类别 1 提交 编辑 类别 2 提交 编辑 类别 3 echo
  • 在 Python 中从设备名称映射到挂载点的可靠且“尽可能便携”的方式

    我希望能够获取设备名称 例如 dev disk2 并确定其安装位置 如果有 例如 mnt cdrom or Volumes RANDLABEL 在Python中 我可以做到这一点的一种方法是运行df or mount然后解析输出 但这看起来