利用python陣列解析ifconfig命令輸出
阿新 • • 發佈:2019-02-13
有時候我們需要對命令的格式化輸出進行解析,解析通常依賴命令自身的格式化特徵,不過這些特徵都有共性:各種層面的迴圈列表結構
比如ifconfig命令,首先迴圈列出所有網路介面,然後在網路介面內,在迴圈列出各個預定義欄位
所以對該命令解析時,首先要按list之list的結構對其輸出內容進行組織,這裡用python的(多維)陣列是個不錯的主意
#encoding=utf-8
import subprocess
tmp_file = open('/tmp/g.log','w')
subprocess.call(['ifconfig'], stdout=tmp_file)
tmp_file = open('/tmp/g.log','r')
ifaces = []
ifaces.append([]) #向陣列的尾端新增一個數組!
ifaces_cnt = 0
line_num = 0
for line_raw in tmp_file:
line = line_raw.rstrip() #空行的長度為1,strip後長度才為0
if len(line) > 0:
ifaces[ifaces_cnt].append(line) #向陣列的尾端新增一個字串!
else:
ifaces_cnt = ifaces_cnt +1
ifaces.append([])
print 'there are %d section'%len(ifaces)
for face in ifaces:
print '========'
for l in face:
print l
執行輸出效果:
there are 3 section
========
eth1 Link encap:乙太網 硬體地址 00:1c:25:dd:44:8b
inet 地址:192.168.0.105 廣播:192.168.0.255 掩碼:255.255.255.0
inet6 地址: fe80::21c:25ff:fedd:448b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 躍點數:1
接收資料包:569916 錯誤:0 丟棄:0 過載:0 幀數:0
傳送資料包:389975 錯誤:0 丟棄:0 過載:0 載波:0
碰撞:0 傳送佇列長度:1000
接收位元組:651139742 (651.1 MB) 傳送位元組:37622845 (37.6 MB)
中斷:17
========
lo Link encap:本地環回
inet 地址:127.0.0.1 掩碼:255.0.0.0
inet6 地址: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 躍點數:1
接收資料包:17094 錯誤:0 丟棄:0 過載:0 幀數:0
傳送資料包:17094 錯誤:0 丟棄:0 過載:0 載波:0
碰撞:0 傳送佇列長度:0
接收位元組:1578445 (1.5 MB) 傳送位元組:1578445 (1.5 MB)
========多出來的1個section是邊界效應,請忽視
