利用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是邊界效應,請忽視