python获取linux系统信息的三种方法

方法一:psutil模块

#!usr/bin/env python# -*- coding: utf-8 -*-import socketimport psutilclass NodeResource(object): def get_host_info(self):host_name = socket.gethostname()return {'host_name':host_name} def get_cpu_state(self):cpu_count = psutil.cpu_count(logical=False)cpu_percent =(str)(psutil.cpu_percent(1))+'%'return {'cpu_count':cpu_count,'cpu_percent':cpu_percent} def get_memory_state(self):mem = psutil.virtual_memory()mem_total = mem.total / 1024 / 1024mem_free = mem.available /1024/1024mem_percent = '%s%%'%mem.percentreturn {'mem_toal':mem_total,'mem_free':mem_free,'mem_percent':mem_percent} def get_disk_state(self):disk_stat = psutil.disk_usage('/')disk_total = disk_stat.totaldisk_free = disk_stat.freedisk_percent = '%s%%'%disk_stat.percentreturn {'mem_toal': disk_total, 'mem_free': disk_free, 'mem_percent': disk_percent}

方法二:proc
#!usr/bin/env python# -*- coding: utf-8 -*-import timeimport osfrom multiprocessing import cpu_countclass NodeResource(object): def usage_percent(self,use, total):# 返回百分占比try:ret = int(float(use)/ total * 100)except ZeroDivisionError:raise Exception("ERROR - zero division error")return '%s%%'%ret @property def cpu_stat(self,interval = 1):cpu_num = cpu_count()with open("/proc/stat", "r") as f:line = f.readline()spl = line.split(" ")worktime_1 = sum([int(i) for i in spl[2:]])idletime_1 = int(spl[5])time.sleep(interval)with open("/proc/stat", "r") as f:line = f.readline()spl = line.split(" ")worktime_2 = sum([int(i) for i in spl[2:]])idletime_2 = int(spl[5])dworktime = (worktime_2 - worktime_1)didletime = (idletime_2 - idletime_1)cpu_percent = self.usage_percent(dworktime - didletime,didletime)return {'cpu_count':cpu_num,'cpu_percent':cpu_percent} @property def disk_stat(self):hd = {}disk = os.statvfs("/")hd['available'] = disk.f_bsize * disk.f_bfreehd['capacity'] = disk.f_bsize * disk.f_blockshd['used'] = hd['capacity'] - hd['available']hd['used_percent'] = self.usage_percent(hd['used'], hd['capacity'])return hd @property def memory_stat(self):mem = {}with open("/proc/meminfo") as f:for line in f:line = line.strip()if len(line) < 2: continuename = line.split(':')[0]var = line.split(':')[1].split()[0]mem[name] = long(var) * 1024.0mem['MemUsed'] = mem['MemTotal'] - mem['MemFree'] - mem['Buffers'] - mem['Cached']mem['used_percent'] = self.usage_percent(mem['MemUsed'],mem['MemTotal'])return {'MemUsed':mem['MemUsed'],'MemTotal':mem['MemTotal'],'used_percent':mem['used_percent']}nr = NodeResource()print nr.cpu_statprint '=================='print nr.disk_statprint '=================='print nr.memory_stat

方法三:subprocess
from subprocess import Popen, PIPEimport os,sys''' 获取 ifconfig 命令的输出 '''def getIfconfig(): p = Popen(['ifconfig'], stdout = PIPE) data = https://www.it610.com/article/p.stdout.read() return data''' 获取 dmidecode 命令的输出 '''def getDmi(): p = Popen(['dmidecode'], stdout = PIPE) data = https://www.it610.com/article/p.stdout.read() return data''' 根据空行分段落 返回段落列表'''def parseData(data): parsed_data = https://www.it610.com/article/[] new_line ='' data = https://www.it610.com/article/[i for i in data.split('\n') if i] for line in data:if line[0].strip():parsed_data.append(new_line)new_line = line + '\n'else:new_line += line + '\n' parsed_data.append(new_line) return [i for i in parsed_data if i]''' 根据输入的段落数据分析出ifconfig的每个网卡ip信息 '''def parseIfconfig(parsed_data): dic = {} parsed_data = https://www.it610.com/article/[i for i in parsed_data if not i.startswith('lo')] for lines in parsed_data:line_list = lines.split('\n')devname = line_list[0].split()[0]macaddr = line_list[0].split()[-1]ipaddr = line_list[1].split()[1].split(':')[1]break dic['ip'] = ipaddr return dic''' 根据输入的dmi段落数据 分析出指定参数 '''def parseDmi(parsed_data): dic = {} parsed_data = https://www.it610.com/article/[i for i in parsed_data if i.startswith('System Information')] parsed_data = https://www.it610.com/article/[i for i in parsed_data[0].split('\n')[1:] if i] dmi_dic = dict([i.strip().split(':') for i in parsed_data]) dic['vender'] = dmi_dic['Manufacturer'].strip() dic['product'] = dmi_dic['Product Name'].strip() dic['sn'] = dmi_dic['Serial Number'].strip() return dic''' 获取Linux系统主机名称 '''def getHostname(): with open('/etc/sysconfig/network') as fd:for line in fd:if line.startswith('HOSTNAME'):hostname = line.split('=')[1].strip()break return {'hostname':hostname}''' 获取Linux系统的版本信息 '''def getOsVersion(): with open('/etc/issue') as fd:for line in fd:osver = line.strip()break return {'osver':osver}''' 获取CPU的型号和CPU的核心数 '''def getCpu(): num = 0 with open('/proc/cpuinfo') as fd:for line in fd:if line.startswith('processor'):num += 1if line.startswith('model name'):cpu_model = line.split(':')[1].strip().split()cpu_model = cpu_model[0] + ' ' + cpu_model[2] + ' ' + cpu_model[-1] return {'cpu_num':num, 'cpu_model':cpu_model}''' 获取Linux系统的总物理内存 '''def getMemory(): with open('/proc/meminfo') as fd:for line in fd:if line.startswith('MemTotal'):mem = int(line.split()[1].strip())break mem = '%.f' % (mem / 1024.0) + ' MB' return {'Memory':mem}if __name__ == '__main__': dic = {} data_ip = getIfconfig() parsed_data_ip = parseData(data_ip) ip = parseIfconfig(parsed_data_ip) data_dmi = getDmi() parsed_data_dmi = parseData(data_dmi) dmi = parseDmi(parsed_data_dmi) hostname = getHostname() osver = getOsVersion() cpu = getCpu() mem = getMemory() dic.update(ip) dic.update(dmi) dic.update(hostname) dic.update(osver) dic.update(cpu) dic.update(mem) ''' 将获取到的所有数据信息并按简单格式对齐显示 ''' for k,v in dic.items():print '%-10s:%s' % (k, v)

from subprocess import Popen, PIPEimport time''' 获取 ifconfig 命令的输出 '''# def getIfconfig():#p = Popen(['ipconfig'], stdout = PIPE)#data = https://www.it610.com/article/p.stdout.read()#data = data.decode('cp936').encode('utf-8')#return data## print(getIfconfig())p = Popen(['top -n 2 -d |grep Cpu'],stdout= PIPE,shell=True)data = https://www.it610.com/article/p.stdout.read()info = data.split('\n')[1]info_list = info.split()cpu_percent ='%s%%'%int(float(info_list[1])+float(info_list[3]))print cpu_percent

【python获取linux系统信息的三种方法】以上就是python获取linux系统信息的三种方法的详细内容,更多关于python获取linux系统信息的资料请关注脚本之家其它相关文章!

    推荐阅读