其实获取Linux系统信息,如果使用python的psutil的模块,更加的简洁好用。自己写的这个脚本算是一个python练习。#!/usr/bin/env python2.7 #www.linuxidc.com # -*- coding:utf-8 -*- import os import subprocess import re import hashlib #对字典取子集 def sub_dict(form_dict, sub_keys, default=None): return dict([(k, form_dict.get(k.strip(), default)) for k in sub_keys.split(",")]) #读取cpuinfo信息 # dmidecode -t 4 def read_cpuinfo(): cpu_stat = [] with open("/proc/cpuinfo", "r") as f: data = f.read() for line in data.split("
"): cpu_stat.append(line) return cpu_stat[-2] #读取fdisk信息 def read_fdisk(): p = subprocess.Popen("fdisk -l", stdout=subprocess.PIPE, shell=True) out = p.communicate()[0] info = [] for i in out.split("
"): for x in i.splitlines(): if x: info.append(x) return info #读取dmidecode信息 def read_dmidecode(): p = subprocess.Popen("dmidecode -t 1", stdout=subprocess.PIPE, shell=True) return p.communicate()[0] #读取ifconfig信息 def read_ifconfig(): p = subprocess.Popen("ifconfig", stdout=subprocess.PIPE, shell=True) return p.communicate()[0] #返回cpu信息:CPU型号、颗数、核数 def get_cpuinfo(data): cpu_info = {} for i in data.splitlines(): k, v = [x.strip() for x in i.split(":")] cpu_info[k] = v
for i in data: if m_disk.match(i): i = i.split(",")[0] k, v = [x for x in i.split(":")] disk_info[k] = v return disk_info #返回硬件信息:品牌、型号 def get_dmiinfo(data): dmi_info = {} line_in = False for line in data.splitlines(): if line.startswith("System Information"): line_in = True continue if line.startswith(" ") and line_in: k, v = [i.strip() for i in line.split(":")] dmi_info[k] = v else: line_in = False return sub_dict(dmi_info, "Manufacturer,Product Name,Serial Number") #返回网卡及ip信息:网卡、IP址、MAC地址 def get_ipinfo(data): data = (i for i in data.split("
") if i and not i.startswith("lo")) ip_info = [] ifname = re.compile(r"(eth[d:]*|wlan[d:]*)") ipaddr = re.compile(r"(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9]{1,2})(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9]{1,2})){3}") macaddr = re.compile(r"[A-F0-9a-f:]{17}") for i in data: x = {} if ifname.match(i): device = ifname.match(i).group() x["Adapter"] = device if macaddr.search(i): mac = macaddr.search(i).group() x["MAC"] = mac if ipaddr.search(i): ip = ipaddr.search(i).group() x["IP"] = ip else: x["IP"] = None ip_info.append(x) return ip_info #返回内存及swap大小 def get_meminfo(): mem_info = {} with open("/proc/meminfo", "r") as f: data = f.readlines() for i in data: k, v = [x.strip() for x in i.split(":")] mem_info[k] = int(v.split()[0]) return sub_dict(mem_info, "MemTotal,SwapTotal") #返回操作信息 def get_osinfo(): os_info = {} i = os.uname() os_info["os_type"] = i[0] os_info["node_name"] = i[1] os_info["kernel"] = i[2] return os_info #唯一标识符 def get_indentity(data): match_serial = re.compile(r"Serial Number: .*", re.DOTALL) match_uuid = re.compile(r"UUID: .*", re.DOTALL) if match_serial.search(data): serial = match_serial.search(data).group() if match_uuid.search(data): uuid = match_uuid.search(data).group() if serial: serial_md5 = hashlib.md5(serial).hexdigest() return serial_md5 elif uuid: uuid_md5 = hashlib.md5(uuid).hexdigest() return uuid_md5 if __name__ == "__main__": ipinfo = get_ipinfo(read_ifconfig()) dmiinfo = get_dmiinfo(read_dmidecode()) cpuinfo = get_cpuinfo(read_cpuinfo()) diskinfo = get_diskinfo(read_fdisk()) meminfo = get_meminfo() osinfo = get_osinfo() identity = get_indentity(read_dmidecode())推荐阅读:Python获取程序运行目录和脚本目录 http://www.linuxidc.com/Linux/2012-04/57945.htmPython Shell下使用matplotlib http://www.linuxidc.com/Linux/2013-07/87779.htm