1

ここで尋ねられたものと同様の質問があります:特定のファイルを含むファイルシステムのサイズと空き容量を見つける, しかし、その質問は、システムについてすでに何か知っていることを前提としています.

私にはタスクがあります。定期的に展開される新しいマシンを含め、未定の数のマシンについて、パーティションのいずれかがいっぱいになった場合に報告できる Python スクリプトが必要です。(はい、icinga2 によってデプロイされます)。

私がしていないのは、すべてのマシンのスクリプトへの引数を手作りしてパーソナライズし、チェックしたいパーティションを通知することです。スクリプトを実行すると、システムに存在するすべてのパーティションが報告されます。チェックするパーティションを外部から定義するのではなく、システム自体に権限を与えます。これは Linux では問題なく動作し、上記のリンクの回答が示すように、Linux では /proc 内のファイルを解析して信頼できるリストを取得できます。

しかし、私が欠けているのは、Python から Mac OS X のパーティションの信頼できるリストを取得する方法です。

Mac OS X には /proc がないため、解析は機能しません。私の目標は、Linux クライアントと Mac クライアントの両方で実行されるように Python スクリプトをビルドすることなので、外部バイナリを呼び出したくありません。何か案は?

4

2 に答える 2

4

クロス プラットフォーム (Mac と Linux) のオプションが必要なため、両方のプラットフォームで使用できるdfコマンドを使用できます。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" 
于 2016-02-17T23:52:16.783 に答える
2

これを行うための統一されたクロスプラットフォームの方法があるとは思いませんが、モジュールを使用して、OS X に対してこのようなsubprocessコマンドを呼び出すことができます$ diskutil list

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

oコマンドの出力が含まれますdiskutil

于 2016-02-17T23:31:25.363 に答える