2012-03-20 16 views
2

是否有任何Python模塊可以讓我訪問NFS配額信息,而不必解析quota命令的輸出?我知道,如果我有足夠的動力,我可以使用Python的xdrlib模塊編寫我自己的ONC/RPC代碼,但我希望盡我所能,不必與NFS的內部密切相關。Python訪問NFS配額信息?

理想情況下,我希望現有的RPC實現或一些更高級別的模塊(如現有的C庫或其他東西的包裝)。

一個可以接受的替代品就像是產生更多機器可讀輸出的quota命令。

+0

嗯。我發現quota-utils軟件包的更新版本包含更好輸出的選項(例如'--raw-grace'和'--no-wrap')。 – larsks 2012-03-20 15:23:54

回答

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選項:

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

所以,現在,用戶可以運行:

quota -f ~ 

,並得到他們的主目錄中的配額信息。此外,-s選項將顯示「人類可讀」數字,而不是將所有內容都顯示爲數據塊。

愛麗絲,這可能是這樣的:

$ 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輸出中的腳本:

  • -w選項禁止當「文件系統」名稱太長時,換行。
  • 如果用戶未處於超額配額狀態,-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掛載點。 我已經這樣做了。