使用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搭建简易服务器分析与实现
Dec 15 Python
Python实现的中国剩余定理算法示例
Aug 05 Python
Python numpy实现数组合并实例(vstack,hstack)
Jan 09 Python
python简单商城购物车实例代码
Mar 15 Python
Python对多属性的重复数据去重实例
Apr 18 Python
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
Apr 19 Python
浅谈Tensorflow模型的保存与恢复加载
Apr 26 Python
python一行sql太长折成多行并且有多个参数的方法
Jul 19 Python
Python 实现opencv所使用的图片格式与 base64 转换
Jan 09 Python
python连接mysql有哪些方法
Jun 24 Python
Python文件操作及内置函数flush原理解析
Oct 13 Python
Python 文字识别
May 11 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
Google Voice 短信发送接口PHP开源版(2010.5更新)
2010/07/22 PHP
一个简单的php加密解密函数(动态加密)
2013/06/19 PHP
PHP 5.3新增魔术方法__invoke概述
2014/07/23 PHP
php用ini_get获取php.ini里变量值的方法
2015/03/04 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
2019/03/01 PHP
php输出控制函数和输出函数生成静态页面
2019/06/27 PHP
PHP常量及变量区别原理详解
2020/08/14 PHP
JavaScript Chart 插件整理
2010/06/18 Javascript
基于Jquery的动态添加控件并取值的实现代码
2010/09/24 Javascript
基于jQuery Tipso插件实现消息提示框特效
2016/03/16 Javascript
jQuery继承extend用法详解
2016/10/10 Javascript
JavaScript实现页面定时刷新(定时器,meta)
2016/10/12 Javascript
AngularJs上传前预览图片的实例代码
2017/01/20 Javascript
JS实现的base64加密解密操作示例
2018/04/18 Javascript
vue+express 构建后台管理系统的示例代码
2018/07/19 Javascript
js序列化和反序列化的使用讲解
2019/01/19 Javascript
使用express来代理服务的方法
2019/06/21 Javascript
Vue 刷新当前路由的实现代码
2019/09/26 Javascript
js实现移动端吸顶效果
2020/01/08 Javascript
vue-socket.io跨域问题有效解决方法
2020/02/11 Javascript
Nodejs实现微信分账的示例代码
2021/01/19 NodeJs
[38:21]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS Newbee
2018/03/31 DOTA
详解Python中用于计算指数的exp()方法
2015/05/14 Python
Python subprocess模块常见用法分析
2018/06/12 Python
python re库的正则表达式入门学习教程
2019/03/08 Python
python自动化测试之如何解析excel文件
2019/06/27 Python
python 爬虫网页登陆的简单实现
2020/11/30 Python
浅谈css3中的渐进增强和优雅降级
2017/12/01 HTML / CSS
世界顶级足球门票网站:Live Football Tickets
2017/10/14 全球购物
波兰在线香水店:Perfumy.pl
2019/08/12 全球购物
Puma印度官网:德国运动品牌
2019/10/06 全球购物
几个Linux面试题笔试题
2016/08/01 面试题
中医学专业自荐信范文
2014/04/01 职场文书
学生评语大全
2014/04/18 职场文书
整顿机关作风心得体会
2014/09/10 职场文书
快消品行业营销模式与盈利模式分享
2019/09/27 职场文书