使用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实现批量转换文件编码的方法
Jul 28 Python
举例讲解如何在Python编程中进行迭代和遍历
Jan 19 Python
Python读取文件内容的三种常用方式及效率比较
Oct 07 Python
用不到50行的Python代码构建最小的区块链
Nov 16 Python
PyCharm鼠标右键不显示Run unittest的解决方法
Nov 30 Python
python实现淘宝购物系统
Oct 25 Python
简单了解python filter、map、reduce的区别
Jan 14 Python
python 安装库几种方法之cmd,anaconda,pycharm详解
Apr 08 Python
Python openpyxl 插入折线图实例
Apr 17 Python
Keras-多输入多输出实例(多任务)
Jun 22 Python
Python基于yaml文件配置logging日志过程解析
Jun 23 Python
Keras loss函数剖析
Jul 06 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实现的MySQL通用查询程序
2007/03/11 PHP
php不允许用户提交空表单(php空值判断)
2013/11/12 PHP
支付宝接口开发集成支付环境小结
2015/03/17 PHP
在laravel框架中使用model层的方法
2019/10/08 PHP
JavaScript入门教程(5) js Screen屏幕对象
2009/01/31 Javascript
IE6不能修改NAME问题的解决方法
2010/09/03 Javascript
js 实现日期灵活格式化的小例子
2013/07/14 Javascript
js函数setTimeout延迟执行的简单介绍
2013/07/17 Javascript
常见的原始JS选择器使用方法总结
2014/04/09 Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
2015/01/23 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
2015/10/30 Javascript
Node.js静态文件服务器改进版
2016/01/10 Javascript
属于你的jQuery提示框(Tip)插件
2016/01/20 Javascript
完善的jquery处理机制
2016/02/21 Javascript
jQuery移动端图片上传组件
2016/06/12 Javascript
D3.js实现柱状图的方法详解
2016/09/21 Javascript
EasyUI修改DateBox和DateTimeBox的默认日期格式示例
2017/01/18 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
2017/02/19 Javascript
echarts整合多个类似option的方法实例
2018/07/10 Javascript
浅谈layui框架自带分页和表格重载的接口解析问题
2019/09/11 Javascript
vue+element获取el-table某行的下标,根据下标操作数组对象方式
2020/08/07 Javascript
[50:02]完美世界DOTA2联赛PWL S2 Magma vs FTD 第三场 11.29
2020/12/03 DOTA
Python常见数据结构详解
2014/07/24 Python
Python实现PS图像明亮度调整效果示例
2018/01/23 Python
Pycharm 操作Django Model的简单运用方法
2018/05/23 Python
python创建文件时去掉非法字符的方法
2018/10/31 Python
Python3获取电脑IP、主机名、Mac地址的方法示例
2019/04/11 Python
keras CNN卷积核可视化,热度图教程
2020/06/22 Python
html5+css3实现一款注册表单实例
2013/04/17 HTML / CSS
美国肌肉和力量商店:Muscle & Strength
2019/06/22 全球购物
副总经理任命书
2014/06/05 职场文书
停车位租赁协议书
2014/09/24 职场文书
酒店财务部岗位职责
2015/04/14 职场文书
企业培训简报范文
2015/07/20 职场文书
优秀班干部主要事迹材料
2015/11/04 职场文书
OpenCV-Python 实现两张图片自动拼接成全景图
2021/06/11 Python