使用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实现巡检系统(solaris)示例
Apr 02 Python
如何搜索查找并解决Django相关的问题
Jun 30 Python
Python使用正则表达式实现文本替换的方法
Apr 18 Python
python实现决策树C4.5算法详解(在ID3基础上改进)
May 31 Python
初学python的操作难点总结(新手必看篇)
Aug 03 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
Jan 05 Python
Python多线程threading和multiprocessing模块实例解析
Jan 29 Python
Python中对数组集进行按行打乱shuffle的方法
Nov 08 Python
python分块读取大数据,避免内存不足的方法
Dec 10 Python
python全栈要学什么 python全栈学习路线
Jun 28 Python
Django 开发环境与生产环境的区分详解
Jul 26 Python
Python Sphinx使用实例及问题解决
Jan 17 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
PHP4和PHP5性能测试和对比 测试代码与环境
2007/08/17 PHP
php获取301跳转URL简单实例
2013/12/16 PHP
PHP MVC框架skymvc支持多文件上传
2016/05/26 PHP
使用ThinkPHP生成缩略图及显示
2017/04/27 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
使用composer命令加载vendor中的第三方类库 的方法
2019/07/09 PHP
XmlUtils JS操作XML工具类
2009/10/01 Javascript
jQuery实现的一个tab切换效果内部还嵌有切换
2014/08/10 Javascript
JavaScript实现显示函数调用堆栈的方法
2016/04/21 Javascript
jQuery滚动新闻实现代码
2016/06/26 Javascript
jQuery中 $ 符号的冲突问题及解决方案
2016/11/04 Javascript
JavaScript实现自动跳转文本功能
2017/05/25 Javascript
webpack+react+antd脚手架优化的方法
2018/04/02 Javascript
微信小程序wepy框架笔记小结
2018/08/08 Javascript
加快Vue项目的开发速度的方法
2018/12/12 Javascript
JavaScript实现省市区三级联动
2020/02/13 Javascript
[42:22]DOTA2上海特级锦标赛C组小组赛#1 OG VS Archon第一局
2016/02/27 DOTA
[43:18]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
[05:09]DOTA2-DPC中国联赛2月22日Recap集锦
2021/03/11 DOTA
解决PyCharm中光标变粗的问题
2017/08/05 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
2019/05/15 Python
与Django结合利用模型对上传图片预测的实例详解
2019/08/07 Python
vue学习笔记之动态组件和v-once指令简单示例
2020/02/29 Python
Ubuntu16安装Python3.9的实现步骤
2020/12/15 Python
匡威爱尔兰官网:Converse爱尔兰
2019/06/09 全球购物
学校经典推荐信
2013/10/30 职场文书
销售部主管岗位职责
2013/12/18 职场文书
端午节粽子促销活动方案
2014/02/02 职场文书
英语专业求职信
2014/07/08 职场文书
工资证明格式模板
2015/06/12 职场文书
2016三八妇女节慰问信
2015/11/30 职场文书
《法国号》教学反思
2016/02/22 职场文书
写给汽车4S店的创业计划书,拿来即用!
2019/08/09 职场文书
python3美化表格数据输出结果的实现代码
2021/04/14 Python
python 办公自动化——基于pyqt5和openpyxl统计符合要求的名单
2021/05/25 Python
JavaScript原型链中函数和对象的理解
2022/06/16 Javascript