在 Python 中,如何获取 Mac OS X 中所有分区的列表?

In Python, how do I get a list of all partitions in Mac OS X?

我有一个与此处提出的问题类似的问题:Find size and free space of the filesystem containing a given file,但该问题假设您已经了解该系统。

我有一个任务:对于未确定数量的 mac 网络,包括定期部署的新网络,我 have/need 一个 python 脚本,如果有的话可以向我报告分区太满了。 (是的,它是由 icinga2 部署的)。

我不做的是为每个 machine 手工制作和个性化脚本参数,以告知它我要检查的分区;我 运行 脚本,它只是向我报告系统上所有现存的分区。我让系统本身成为自己的权威,而不是从外部定义要检查的分区。这在 linux 中工作正常,正如上面链接的答案所示,在 linux 中我们可以解析 /proc 中的文件以获得权威列表。

但我缺少的是一种从 python.

中获取 Mac OS X 中可靠的分区列表的方法

Mac OS X 没有 /proc,所以无法进行解析。我不想调用外部二进制文件,因为我的目标是在 linux 和 mac 客户端上将我的 python 脚本构建到 运行。有什么想法吗?

我认为没有统一的跨平台方法可以做到这一点,但您可以使用 subprocess 模块并像这样为 OS 调用命令 $ diskutil list X

import subprocess
p = subprocess.Popen(['diskutil', 'list'], stdout=subprocess.PIPE)
o = p.stdout.read()

o 将包含 diskutil 命令的输出。

既然你想要跨平台(Mac和Linux)选项,你可以使用df command which is available on both platforms. You can access it through subprocess.

我已经针对 OS X 10.11 和 Ubuntu Linux 15

进行了测试
import subprocess

process = subprocess.Popen(['df -h | awk \'{print $(NF-1),$NF}\''], stdout=subprocess.PIPE, shell=True)
out, err = process.communicate()
out = out.splitlines()[1:] # grab all the lines except the header line
results = {}
for i in out:
    tmp = i.split(' ')
    results[tmp[1]] = tmp[0]

for key, value in results.items():
    print key + " is " + str(value) +" full"

输出 Mac

/dev is 100% full
/net is 100% full
/ is 82% full
/home is 100% full

输出 Linux

/dev is 1% full
/run/lock is 0% full
/run is 1% full
/ is 48% full

这是没有 awk

的方法
import subprocess

process = subprocess.Popen(['df', '-h'], stdout=subprocess.PIPE)
out, err = process.communicate()
out = out.splitlines()[1:] # grab all the lines except the header line

for i in out:
    tmp = i.split(' ')
    tmp2 = []
    for x in tmp:
        if x != '':
            tmp2.append(x)
    print tmp2[-1] + " is " + tmp2[-2] + " full"