三种用Python获取Linux资源信息的方法

python

方法一: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, 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

""" 根据空行分段落 返回段落列表"""

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, 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("

")[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

回到顶部