2012-03-20 24 views
2

quotaコマンドの出力を解析することなく、NFS割り当て情報にアクセスできるPythonモジュールがありますか?私は十分に動機づけられていれば、Pythonのxdrlibモジュールを使って自分のONC/RPCコードを書くことができますが、私はNFSの内部に密接に関わる必要はないと私は心から期待しています。NFSクォータ情報へのPythonアクセス?

理想的には、私は既存のRPC実装、または(既存のCライブラリなどのラッパーのような)いくつかの上位モジュールを望んでいます。

許容可能な代替品は、機械で読み取り可能な出力を生成するquotaコマンドのようなものです。

+0

Hmm。より最近のバージョンのquota-utilsパッケージには、より良い出力( '--raw-grace'や' --no-wrap'など)のオプションが含まれています。 – larsks

答えて

1

この質問は、最初にquotaコマンドのバージョン3.13で問題が発生しました。これは、エンドユーザーがクォータ情報を決定するためのツールとして本質的に役に立たないものです。 alicequotaを実行した場合、彼女はこのような出力が表示される場合があります

Disk quotas for user alice (uid 100): 
    Filesystem blocks quota limit grace files quota limit grace 
fileserver.example.com:/staff/b/bob 
       9254720 9728000 10240000   119768  0  0  

アリスは当然、これは彼女のアカウントとしなければならなかったのだろうかでしょう。

最後にquota-utilsパッケージの背後にある心は、ツールに固有の問題を認識したことが判明しました。バージョン4.00(Fedora 16で利用可能)では、quotaコマンドを実際に有用な情報を生成するものにするいくつかの新しいオプションがあります。特に興味深いの

-fオプションです:

quota -f ~ 

をそして、彼らのホームディレクトリのクォータ情報を取得する:

-f, --filesystem-list  display quota information only for given filesystems 

だから今、ユーザーが実行することができます。さらに、-sオプションでは、すべてをブロックとして表示するのではなく、「人間が判読可能な」数字が表示されます。アリスのために

、これは次のようになります。

  • -wオプションの阻害:

    $ quota -s -f ~ 
    Disk quotas for user alice (uid 100): 
        Filesystem blocks quota limit grace files quota limit grace 
    fileserver.example.com:/staff/a/alice 
           9038M 9500M 10000M   120k  0  0   
    

    はさらに、それははるかに簡単にスクリプトでquotaからの出力を処理するために作る2つのオプションがあります"ファイルシステム"の名前が長すぎるときに行を折り返します。

  • -pオプションは、ユーザーがクォータ超過状況にない場合は、猶予時間の間、0を表示します。これは、常に同じ数のフィールドがあることを意味します(前のバージョンのquotaでは、フィールドの数は状況によって異なる場合があります)。上記のすべてを組み合わせる

、我々はこのような何かを得る:

$ quota -wp -f ~ 
Disk quotas for user alice (uid 100): 
    Filesystem space quota limit grace files quota limit grace 
fileserver.example.com:/staff/a/alice 9254720 9728000 10240000  0 119768 0 

くらい自動化のためのより有用です。

0
command_array = ['quota', '-wp', '-f', '/home/nfs/user1'] 
output = subprocess.check_output(command_array) 
# use only the second line, this is util info 
beauty_output = output.split('\n')[2].split() 
remote_fs = beauty_output[0] 
blocks = beauty_output[1] 
quota = beauty_output[2] 
limit = beauty_output[3] 
... 

/home/nfs/user1がnfsマウントポイントであることを考慮してください。 私はこのようにしました。

関連する問題