使用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 打印对象的所有属性值的方法
Sep 11 Python
利用信号如何监控Django模型对象字段值的变化详解
Nov 27 Python
Python排序搜索基本算法之希尔排序实例分析
Dec 09 Python
python web基础之加载静态文件实例
Mar 20 Python
python检测主机的连通性并记录到文件的实例
Jun 21 Python
python 保存float类型的小数的位数方法
Oct 17 Python
Python找出微信上删除你好友的人脚本写法
Nov 01 Python
Python 循环终止语句的三种方法小结
Jun 24 Python
Django 创建后台,配置sqlite3教程
Nov 18 Python
使用SQLAlchemy操作数据库表过程解析
Jun 10 Python
Python2与Python3关于字符串编码处理的差别总结
Sep 07 Python
pytorch 实现L2和L1正则化regularization的操作
Mar 03 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
memcached 和 mysql 主从环境下php开发代码详解
2010/05/16 PHP
那些年一起学习的PHP(三)
2012/03/22 PHP
PHP中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
php上传图片之时间戳命名(保存路径)
2014/08/15 PHP
浅析php适配器模式(Adapter)
2014/11/25 PHP
PHP程序员的技术成长规划
2016/03/25 PHP
jQuery powerFloat万能浮动层下拉层插件使用介绍
2010/12/27 Javascript
javascript小组件 原生table排序表格脚本(兼容ie firefox opera chrome)
2012/07/25 Javascript
JS控制图片翻转示例代码(兼容firefox,ie,chrome)
2013/12/19 Javascript
js获得网页背景色和字体色的方法
2014/03/21 Javascript
常用javascript表单验证汇总
2020/07/20 Javascript
Javascript实现图片轮播效果(二)图片序列节点的控制实现
2016/02/17 Javascript
浅谈js构造函数的方法与原型prototype
2016/07/04 Javascript
微信小程序购物商城系统开发系列-目录结构介绍
2016/11/21 Javascript
Bootstrap 模态框实例插件案例分析
2016/12/28 Javascript
canvas实现图像放大镜
2017/02/06 Javascript
说说AngularJS中的$parse和$eval的用法
2017/09/14 Javascript
微信小程序websocket实现聊天功能
2020/03/30 Javascript
jQuery控制input只能输入数字和两位小数的方法
2019/05/16 jQuery
vue+axios 拦截器实现统一token的案例
2020/09/11 Javascript
跟老齐学Python之让人欢喜让人忧的迭代
2014/10/02 Python
python求pi的方法
2014/10/08 Python
详解Python的Django框架中的模版继承
2015/07/16 Python
Python 登录网站详解及实例
2017/04/11 Python
老生常谈Python序列化和反序列化
2017/06/28 Python
Django开发中复选框用法示例
2018/03/20 Python
pandas把dataframe转成Series,改变列中值的类型方法
2018/04/10 Python
python中plot实现即时数据动态显示方法
2018/06/22 Python
pygame游戏之旅 载入小车图片、更新窗口
2018/11/20 Python
python多线程共享变量的使用和效率方法
2019/07/16 Python
python 下 CMake 安装配置 OPENCV 4.1.1的方法
2019/09/30 Python
jupyternotebook 撤销删除的操作方式
2020/04/17 Python
利用python为PostgreSQL的表自动添加分区
2021/01/18 Python
豪华床上用品、床单和浴室必需品:Peacock Alley
2019/09/04 全球购物
商铺门前三包责任书
2014/07/25 职场文书
2019军训心得体会
2019/06/27 职场文书