三种用Python获取Linux资源信息的方法
方法一:psutil模块
python">#!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 / 1024
mem_free = mem.available /1024/1024
mem_percent = "%s%%"%mem.percent
return {"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.total
disk_free = disk_stat.free
disk_percent = "%s%%"%disk_stat.percent
return {"mem_toal": disk_total, "mem_free": disk_free, "mem_percent": disk_percent}
psutil
方法二:、proc
#!usr/bin/env python# -*- coding: utf-8 -*-
#Python学习交流群:778463939
import time
import os
from multiprocessing import cpu_count
class 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_bfree
hd["capacity"] = disk.f_bsize * disk.f_blocks
hd["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: continue
name = line.split(":")[0]
var = line.split(":")[1].split()[0]
mem[name] = long(var) * 1024.0
mem["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_stat
proc
方法三:subprocess
from subprocess import Popen, PIPEimport 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
""" 根据空行分段落 返回段落列表"""
def parseData(data):
parsed_data = []
new_line = ""
data = [i for i in data.split("
") if i]
for line in data:
if line[0].strip():
parsed_data.append(new_line)
new_line = line + "
"
else:
new_line += line + "
"
parsed_data.append(new_line)
return [i for i in parsed_data if i]
""" 根据输入的段落数据分析出ifconfig的每个网卡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("
")
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 = [i for i in parsed_data if i.startswith("System Information")]
parsed_data = [i for i in parsed_data[0].split("
")[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 += 1
if 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)
pipe,poen
from subprocess import Popen, PIPEimport 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("
")[1]
info_list = info.split()
cpu_percent ="%s%%"%int(float(info_list[1])+float(info_list[3]))
print cpu_percent
top+Popen
以上是 三种用Python获取Linux资源信息的方法 的全部内容, 来源链接: utcz.com/z/530232.html