1.简介
用命令行的方式获取到主机性能(比如磁盘使用率,CPU和内存使用率等)的字符串,如果要分析或者入库的话必须对其进行解析,使其可以已合适的方式展现。
用自己的实际经验给大家提供一个简单的解析函数作为参考,还望各位批评指正。
2.函数
先上代码:
#/usr/bin/env python
#encoding=utf-8
#ZPF
class Storage(dict):
"""
Storage就是把python字典的get set方法打包,酱紫用起来比较方便
>>> o = storage(a=1)
>>> o.a
1
>>> o['a']
1
>>> o.a = 2
>>> o['a']
2
"""
def __getattr__(self, key):
try:
return self[key]
except KeyError as k:
raise AttributeError(k)
def __setattr__(self, key, value):
self[key] = value
def __delattr__(self, key):
try:
del self[key]
except KeyError as k:
raise AttributeError(k)
def __repr__(self):
return '<Storage ' + dict.__repr__(self) + '>'
storage = Storage
def analyzeStr(str, title_list, start, end=None):
'''
解析获取到的字符串
str需要解析的数据,title_list指定切片对应的列名
start 开始行,一般会自己带一列标题 , 那么要从1行开始
end 一些末尾会有多余的空行,需要抛弃
'''
title_len = len(title_list)
li = str.split('\n') #按换行符分割
li = li[start:end] #切片,切掉不需要的头和尾
li = [i.split() for i in li] #按空格分割,分割成小列表
table = []
for i in li:
d = storage() #根据storage的定义知,这里用d = {}也是可以的。
for n, v in enumerate(i):
if n >= title_len:
d[title_list[title_len - 1]] += ' ' + v
else:
d[title_list[n]] = v
table.append(d)
return table
上述先定义一个用于存储的类Storage(),方便使用,接着用analyzeStr()函数对得到的字符串进行解析。
3.实例
给出一个解析磁盘使用率的例子,以windows为例:def main():
command = 'wmic logicaldisk get caption, filesystem, size, freespace, drivetype' #获取磁盘使用情况的命令行
re = os.popen(command)
rt = re.read() #得到的数据
re.close()
win_list = ["Caption", "DriveType", "FileSystem", "FreeSpace", "Size"]
table = analyzeStr(rt,win_list,1,-2) #调用解析函数
return table
if __name__ == '__main__':
print main()
最后得到的数据很容易用于网页显示和存入数据库,我们的目的就达到了。