方法一: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 / 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 -*-
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('\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 = [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 = [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系统主机名称 '''
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('\n')[1]
info_list = info.split()
cpu_percent ='%s%%'%int(float(info_list[1])+float(info_list[3]))
print cpu_percent

top+Popen

用Python获取Linux资源信息的三种方法的更多相关文章

  1. php获取网页header信息的4种方法

    php获取网页header信息的方法多种多样,就php语言来说,我知道的方法有4种, 下面逐一献上. 方法一:使用get_headers()函数 推荐指数: ★★★★★ get_header方法最简单 ...

  2. python每次处理一个字符的三种方法

    python每次处理一个字符的三种方法 a_string = "abccdea" print 'the first' for c in a_string: print ord(c) ...

  3. PHP获取文件后缀名的三种方法

    如下: <? PHP获取文件后缀名的几种方法1: function get_file_type($filename){ $type = substr($filename, strrpos($fi ...

  4. python获取网页信息的三种方法

    import urllib.request import http.cookiejar url = 'http://www.baidu.com/' # 方法一 print('方法一') req_one ...

  5. python 获取本机IP的三种方式

    python获取本机IP的方式 第一种: #!/usr/bin/python import socket import fcntl import struct def get_ip_address(i ...

  6. Linux 下系统调用的三种方法

    系统调用(System Call)是操作系统为在用户态运行的进程与硬件设备(如CPU.磁盘.打印机等)进行交互提供的一组接口.当用户进程需要发生系统调用时,CPU 通过软中断切换到内核态开始执行内核系 ...

  7. Python 文件行数读取的三种方法

    Python三种文件行数读取的方法: #文件比较小 count = len(open(r"d:\lines_test.txt",'rU').readlines()) print c ...

  8. Python 判断文件是否存在的三种方法

    通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做任何操作之前,先判断文件是否存在. 这里将介绍三种判断文件或文件夹是否存在的方法,分别使用os模块.Try ...

  9. python webdriver api-上传文件的三种方法

    上传文件: 第一种方式,sendkeys(),最简单的 #encoding=utf-8 from selenium import webdriver import unittest import ti ...

随机推荐

  1. Solr4.6删除数据的办法

    Solr4.6的管理界面上,假设不配置数据导入的功能,将看不到清除数据的button.我表示非常遗憾,正好我们线上没有配置数据导入的功能. 网上搜到的各种清理solr数据的HTTP请求,拿到我的sol ...

  2. mysql(表类型的选择)

    1.查询mysql所支持的存储引擎 第一种方法:show engines \G

  3. win7 下配置 java 环境变量[转]

    首先,你应该已经安装了 java 的 JDK 了,笔者安装的是:jdk-7u7-windows-x64 接下来主要讲怎么配置 java 的环境变量,也是为了以后哪天自己忘记了做个备份 1.进入“计算机 ...

  4. python--标准库 时间与日期 (time, datetime包)

    Python具有良好的时间和日期管理功能.实际上,计算机只会维护一个挂钟时间(wall clock time),这个时间是从某个固定时间起点到现在的时间间隔.时间起点的选择与计算机相关,但一台计算机的 ...

  5. python --循环对象

    转自:http://www.cnblogs.com/vamei/archive/2012/07/09/2582499.html 这一讲的主要目的是为了大家在读Python程序的时候对循环对象有一个基本 ...

  6. Linux平台上实现队列

    转载: http://my.oschina.net/sundq/blog/203600 Linux上目前有两种事件通知方式,一种是线程条件变量,一种是利用eventfd实现事件通知,下面介绍一下利用这 ...

  7. Memory leak patterns in JavaScript

    Handling circular references in JavaScript applications Plugging memory leaks in JavaScript is easy ...

  8. blender, merge顶点

    选择Edit Mode:,和vertex select: 同时选中两个要merge的顶点(同时选中多个顶点:http://www.cnblogs.com/wantnon/p/4526573.html) ...

  9. XMPP 基础 (转载)

    技术博客 http://www.cnblogs.com/ChenYilong/  新浪微博 http://weibo.com/luohanchenyilong Fullscreen XMPP   基础 ...

  10. 编译器DIY——读文件

    编译器的前端词法分析:将源文件解析成一个个的单词流.为语法分析做准备. 在词法分析阶段,我们要做的就是将词分出来,而且确定单词的类型,一般的程序设计语言的单词符号能够份为下面5种: 1.keyword ...