用Python获取Linux资源信息的三种方法
生活随笔
收集整理的這篇文章主要介紹了
用Python获取Linux资源信息的三种方法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
方法一:psutil模塊
#!usr/bin/env python # -*- coding: utf-8 -*-import socket import psutil class 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}psutil方法二:、proc
#!usr/bin/env python # -*- coding: utf-8 -*- #遇到問題沒人解答?小編創(chuàng)建了一個Python學習交流QQ群:778463939 #尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! import time import os from 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@propertydef 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}@propertydef 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@propertydef 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_stat print '==================' print nr.disk_stat print '==================' print nr.memory_statproc方法三:subprocess
from subprocess import Popen, PIPE import os,sys''' 獲取 ifconfig 命令的輸出 ''' def getIfconfig():p = Popen(['ifconfig'], stdout = PIPE)data = p.stdout.read()return data''' 獲取 dmidecode 命令的輸出 ''' def getDmi():p = Popen(['dmidecode'], stdout = PIPE)data = p.stdout.read()return data''' 根據(jù)空行分段落 返回段落列表''' def parseData(data):parsed_data = []new_line = ''data = [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]''' 根據(jù)輸入的段落數(shù)據(jù)分析出ifconfig的每個網(wǎng)卡ip信息 ''' def parseIfconfig(parsed_data):dic = {}parsed_data = [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]breakdic['ip'] = ipaddrreturn dic''' 根據(jù)輸入的dmi段落數(shù)據(jù) 分析出指定參數(shù) ''' def parseDmi(parsed_data):dic = {}parsed_data = [i for i in parsed_data if i.startswith('System Information')]parsed_data = [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系統(tǒng)主機名稱 ''' def getHostname():with open('/etc/sysconfig/network') as fd:for line in fd:if line.startswith('HOSTNAME'):hostname = line.split('=')[1].strip()breakreturn {'hostname':hostname}''' 獲取Linux系統(tǒng)的版本信息 ''' def getOsVersion():with open('/etc/issue') as fd:for line in fd:osver = line.strip()breakreturn {'osver':osver}''' 獲取CPU的型號和CPU的核心數(shù) ''' def getCpu():num = 0with 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系統(tǒng)的總物理內存 ''' def getMemory():with open('/proc/meminfo') as fd:for line in fd:if line.startswith('MemTotal'):mem = int(line.split()[1].strip())breakmem = '%.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)''' 將獲取到的所有數(shù)據(jù)信息并按簡單格式對齊顯示 '''for k,v in dic.items():print '%-10s:%s' % (k, v)pipe,poen from subprocess import Popen, PIPE import time''' 獲取 ifconfig 命令的輸出 ''' # def getIfconfig(): # p = Popen(['ipconfig'], stdout = PIPE) # data = 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 = 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_percenttop+Popen總結
以上是生活随笔為你收集整理的用Python获取Linux资源信息的三种方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 读写函数
- 下一篇: python 中五种常用的数据类型