使用python获取CPU和内存信息的思路与实现(linux系统)


Posted in Python onJanuary 03, 2014

大家都知道,linux里一切皆为文件,在linux/unix的根目录下,有个/proc目录,这个/proc 是一种内核和内核模块用来向进程(process)发送信息的机制(所以叫做“/proc”),这个伪文件系统允许与内核内部数据结构交互,获取有关进程的有用信息,在运行中(on the fly)改变设置(通过改变内核参数)。与其他文件系统不同,/proc 存在于内存而不是硬盘中。proc 文件系统提供的信息如下:

•进程信息:系统中的任何一个进程,在 proc 的子目录中都有一个同名的进程 ID,可以找到 cmdline、mem、root、stat、statm,以及 status。某些信息只有超级用户可见,例如进程根目录。每一个单独含有现有进程信息的进程有一些可用的专门链接,系统中的任何一个进程都有一个单独的自链接指向进程信息,其用处就是从进程中获取命令行信息。
•系统信息:如果需要了解整个系统信息中也可以从/proc/stat 中获得,其中包括 CPU 占用情况、磁盘空间、内存对换、中断等。
•CPU 信息:利用/proc/CPUinfo 文件可以获得中央处理器的当前准确信息。
•负载信息:/proc/loadavg 文件包含系统负载信息。
•系统内存信息:/proc/meminfo 文件包含系统内存的详细信息,其中显示物理内存的数量、可用交换空间的数量,以及空闲内存的数量等。

这样,你可以通过cat 命令查看相关信息:

liujl@liujl-ThinkPad-Edge-E431:~/mybash$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model  : 58
model name : Intel(R) Core(TM) i5-3230M CPU @ 2.60GHz
stepping : 9
microcode : 0x15
cpu MHz  : 1200.000
cache size : 3072 KB
physical id : 0
siblings : 4
core id  : 0
cpu cores : 2
apicid  : 0

。。。 。。。

liujl@liujl-ThinkPad-Edge-E431:~/mybash$ cat /proc/meminfo 
MemTotal:        3593316 kB
MemFree:         2145916 kB
Buffers:           93372 kB
Cached:           684864 kB
SwapCached:            0 kB
Active:           706564 kB
Inactive:         554052 kB
Active(anon):     483996 kB
Inactive(anon):   178388 kB
Active(file):     222568 kB
Inactive(file):   375664 kB

。。 。  。。。

那下面介绍如何通过python编程的方式获取需求的信息。

1、获取cpu的信息

#! /usr/bin/env python
#Filename:CPU1.py
from __future__ import print_function
from collections import OrderedDict
import pprint
def CPUinfo():
    '''Return the info in /proc/cpuinfo
    as a dirctionary in the follow format:
    CPU_info['proc0']={...}
    CPU_info['proc1']={...}
    '''
    CPUinfo=OrderedDict()
    procinfo=OrderedDict()
    nprocs = 0
    with open('/proc/cpuinfo') as f:
        for line in f:
            if not line.strip():
                #end of one processor
                CPUinfo['proc%s' % nprocs]=procinfo
                nprocs = nprocs+1
                #Reset
                procinfo=OrderedDict()
            else:
                if len(line.split(':')) == 2:
                    procinfo[line.split(':')[0].strip()] = line.split(':')[1].strip()
                else:
                    procinfo[line.split(':')[0].strip()] = ''
    return CPUinfo
if __name__ == '__main__':
    CPUinfo = CPUinfo()
    for processor in CPUinfo.keys():
        print('CPUinfo[{0}]={1}'.format(processor,CPUinfo[processor]['model name']))

运行如下:

liujl@liujl-ThinkPad-Edge-E431:~/mypython$ python CPU1.py 
CPUinfo[proc0]=Intel(R) Core(TM) i5-3230M CPU @ 2.60GHz
CPUinfo[proc1]=Intel(R) Core(TM) i5-3230M CPU @ 2.60GHz
CPUinfo[proc2]=Intel(R) Core(TM) i5-3230M CPU @ 2.60GHz
CPUinfo[proc3]=Intel(R) Core(TM) i5-3230M CPU @ 2.60GHz

2、获取内存信息

#! /usr/bin/env python
#Filename:meminfo.py
from __future__ import print_function
from collections import OrderedDict
def meminfo():
    '''return the info of /proc/meminfo
    as a dictionary
    '''
    meminfo = OrderedDict()
    with open('/proc/meminfo') as f:
        for line in f:
            meminfo[line.split(':')[0]] = line.split(':')[1].strip()
    return meminfo

if __name__ == '__main__':
    meminfo = meminfo()
    print("Total memory:{0}".format(meminfo['MemTotal']))
    print("Free memory:{0}".format(meminfo['MemFree']))

结果如下:

liujl@liujl-ThinkPad-Edge-E431:~/mypython$ python meminfo.py 
Total memory:3593316 kB
Free memory:2113712 kB
Python 相关文章推荐
Python中针对函数处理的特殊方法
Mar 06 Python
Flask框架的学习指南之开发环境搭建
Nov 20 Python
Python简单读取json文件功能示例
Nov 30 Python
Python3多线程操作简单示例
May 22 Python
django rest framework 数据的查找、过滤、排序的示例
Jun 25 Python
解决python3中的requests解析中文页面出现乱码问题
Apr 19 Python
python实现图像检索的三种(直方图/OpenCV/哈希法)
Aug 08 Python
用Python实现二叉树、二叉树非递归遍历及绘制的例子
Aug 09 Python
Python for循环与getitem的关系详解
Jan 02 Python
python单例设计模式实现解析
Jan 07 Python
基于python-pptx库中文文档及使用详解
Feb 14 Python
Spy++的使用方法及下载教程
Jan 29 Python
Python群发邮件实例代码
Jan 03 #Python
python切换hosts文件代码示例
Dec 31 #Python
使用Python进行稳定可靠的文件操作详解
Dec 31 #Python
python连接mongodb操作数据示例(mongodb数据库配置类)
Dec 31 #Python
python连接mysql数据库示例(做增删改操作)
Dec 31 #Python
Python抓取Discuz!用户名脚本代码
Dec 30 #Python
python之模拟鼠标键盘动作具体实现
Dec 30 #Python
You might like
使用PHP生成二维码的两种方法(带logo图像)
2014/03/14 PHP
Yii框架连接mongodb数据库的代码
2016/07/27 PHP
thinkPHP框架可添加js事件的分页类customPage.class.php完整实例
2017/03/16 PHP
laravel 框架执行流程与原理简单分析
2020/02/01 PHP
xml 与javascript结合的问题解决方法
2007/03/24 Javascript
javascript针对DOM的应用分析(四)
2012/04/15 Javascript
JavaScript遍历table表格中的某行某列并打印其值
2014/07/08 Javascript
在父页面得到zTree已选中的节点的方法
2015/02/12 Javascript
javascript原生ajax写法分享
2016/04/10 Javascript
javaScript中的原型解析【推荐】
2016/05/05 Javascript
简单的JS轮播图代码
2016/07/18 Javascript
Highcharts学习之坐标轴
2016/08/02 Javascript
基于JavaScript实现跳转提示页面
2016/09/24 Javascript
bootstrap vue.js实现tab效果
2017/02/07 Javascript
详谈jQuery中使用attr(), prop(), val()获取value的异同
2017/04/25 jQuery
xmlplus组件设计系列之树(Tree)(9)
2017/05/02 Javascript
vue+axios实现登录拦截的实例代码
2017/05/22 Javascript
html中通过JS获取JSON数据并加载的方法
2017/11/30 Javascript
为jquery的ajax请求添加超时timeout时间的操作方法
2018/09/04 jQuery
layui文件上传控件带更改后数据传值的方法
2019/09/23 Javascript
微信小程序之滑动页面隐藏和显示组件功能的实现代码
2020/06/19 Javascript
Python字典遍历操作实例小结
2019/03/05 Python
Python除法之传统除法、Floor除法及真除法实例详解
2019/05/23 Python
python字符串替换第一个字符串的方法
2019/06/26 Python
Pyspark获取并处理RDD数据代码实例
2020/03/27 Python
CSS3 透明色 RGBA使用介绍
2013/08/06 HTML / CSS
个性化皮包、小袋、生活配件:Mon Purse
2019/03/26 全球购物
西班牙购买隐形眼镜、眼镜和太阳镜网站:Lentiamo.es
2020/06/11 全球购物
面向对象概念面试题(.NET)
2016/11/04 面试题
航空大学应届生求职信
2013/11/10 职场文书
党员干部对十八届四中全会的期盼
2014/10/17 职场文书
医院领导班子四风问题对照检查材料
2014/10/26 职场文书
2014年护士工作总结范文
2014/11/11 职场文书
实习单位鉴定意见
2015/06/04 职场文书
在校学生证明格式
2015/06/24 职场文书
一篇文章带你复习java知识点
2021/06/28 Java/Android