運用Python語言編寫獲取Linux基本系統信息(二):文件系統使用情況獲取


本文跟着上一篇文章繼續寫,上一篇文章的鏈接

運用Python語言編寫獲取Linux基本系統信息(一):獲得Linux版本、內核、當前時間

 

一、隨便說說

獲取文件系統使用情況的思路和上一篇獲取主要系統是一樣的,都是通過執行命令獲取linux執行命令后的打印,然后對打印出的結果進行處理。

本文在CentOS中獲取文件系統的命令是df -h(用量以G/M單位進行顯示)

在命令行中打印出來的結果是:

 

 

二、想法實現

本篇文章中用到了上一遍文章(鏈接見頂部)的commands模塊在這里就不粘貼代碼占篇幅了。。。

 

fdisk_data.py:

 1 #coding=utf-8
 2 #!/usr/bin/env python
 3 class fdisk_data:
 4     # def __init__(self,filesystem,rom,used,no_used,used_per,mount):
 5     #     self.filesystem=''    #文件系統
 6     #     self.rom=''   #容量
 7     #     self.used=''  #已用
 8     #     self.no_used=''   #可用
 9     #     self.used_per=''  #已用百分比
10     #     self.mount='' #掛載點
11     pass

類fdisk_data.py用來儲存文件系統的信息

 

linux_fdisk.py:

 1 #coding=utf-8
 2 import commands
 3 import re
 4 from fdisk_data import fdisk_data
 5 class linux_fdisk_in:
 6     def __init__(self):
 7         pass
 8     def fdisk(self):
 9         disk_info=[]
10         f_command = commands.commands('df -h')
11         comm=f_command.excute_command()
12         allLine = []
13         for eachLine in comm:
14             for eachList in eachLine.strip().split():
15                 disk_info.append(eachList)
16         return disk_info
17 class  linux_fdisk:
18     def __init__(self):
19         self.fdisk = linux_fdisk_in()
20     def get_fisk(self):
21         # fdiskdata=fdisk_data()
22         disk_info=self.fdisk.fdisk()
23         fdisks=[]
24         # print disk_info
25         #按每一條輸出
26         # for i in range(6):
27         #     j=i
28         #     try:
29         #         while disk_info[j] and not j==1000:
30         #             print disk_info[j]
31         #             j=j+6
32         #     except Exception:
33         #         j=1000
34         #以類的方式實現
35         # i=6
36         # j=1
37         # while j==1:
38         #     try:
39         #         fdiskdata.filesystem=disk_info[i]
40         #         fdiskdata.rom=disk_info[i+1]
41         #         fdiskdata.used=disk_info[i+2]
42         #         fdiskdata.no_used=disk_info[i+3]
43         #         fdiskdata.used_per=disk_info[i+4]
44         #         fdiskdata.mount=disk_info[i+5]
45         #         fdisks.append(fdiskdata)
46         #         i=i+6
47         #         j=0
48         #     except Exception:
49         #         j=0
50         # return fdisks
51         #以字典的方式實現
52         fdiskdate={'filesystem':'','rom':'','used':'','no_used':'','used_per':'','mount':''}
53         fdiskdates=[]
54         i=6
55         j=1
56         while j==1:
57             try:
58                 fdiskdate={'filesystem':disk_info[i],'rom':disk_info[i+1],'used':disk_info[i+2],'no_used':disk_info[i+3],'used_per':disk_info[i+4],'mount':disk_info[i+5]}
59                 fdiskdates.append(fdiskdate)
60                 i=i+6
61             except Exception:
62                 j=0
63         return fdiskdates

linux_fdisk.py包含兩個類:

類linux_fdisk_in:實現在linux中執行命令,並返回result

類linux_fdisk:輸出獲取的結果, 在get_fdisk()方法中我分別以三種方式進行實現,把df -h命令中每一行的每一個詞當做一個數據進行一條數據進行存儲之后在重組進行比較好看的輸出,第一種方式我是直接在函數內print,當時測試用的。。。。第二種我是以類的方式進行存儲。第三種則是以字典所組成的列表的方式進行存儲。

上面的linux_data.py最后是沒有用到的。實現的方式感覺都比較簡單~~~

最后主函數沿用上次的linux_status_main.py並添加文件系統的輸出

linux_status_main.py:

 

#!/usr/bin/env python
# coding=UTF-8
import linux_status
import os_info
from linux_fdisk import *
#linux版本,內核,時間
linux=linux_status.linux_status()
os= os_info.os_info()
linux=os.os_info()
print '系統:',linux.os_version
print '內核:',linux.os_kernal
print '時間:',linux.os_date
#linux文件系統
fdisk = linux_fdisk()
fdisks = fdisk.get_fisk()
print '文件系統'
for i in range(100):
    try:
        print fdisks[i].get('filesystem'),'\t',fdisks[i]['rom'],'\t',fdisks[i]['used'],'\t'\
            ,fdisks[i]['no_used'],'\t',fdisks[i]['used_per'],'\t',fdisks[i]['mount']
    except Exception:
        break

 

大概就是這樣了。。。。

三、結果展示

到了最后的結果演示了:

輸出的沒有標明每一列代表什么,我不知道怎么才能把文件系統做的很規整,圖中第二行就亂了。。。

剛剛開始學python,寫的東西都比較簡單,錯誤比較多,歡迎大家指正批評,共同進步~~!!!!

PS:寫完第一篇以后成就感大大的~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM