使用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 15 Python
Python的时间模块datetime详解
Apr 17 Python
pandas数据预处理之dataframe的groupby操作方法
Apr 13 Python
Python格式化输出%s和%d
May 07 Python
Pycharm导入Python包,模块的图文教程
Jun 13 Python
Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例
Jul 02 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
Jun 25 Python
用python做游戏的细节详解
Jun 25 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
Aug 08 Python
使用python os模块复制文件到指定文件夹的方法
Aug 22 Python
Python笔试面试题小结
Sep 07 Python
python 利用matplotlib在3D空间绘制二次抛物面的案例
Feb 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之autoload运行机制实例分析
2014/08/28 PHP
解决出现SoapFault (looks like we got no XML document)的问题
2017/06/24 PHP
一款JavaScript压缩工具:X2JSCompactor
2007/06/13 Javascript
use jscript Create a SQL Server database
2007/06/16 Javascript
高性能WEB开发 flush让页面分块,逐步呈现 flush让页面分块,逐步呈现
2010/06/19 Javascript
用Javascript实现Sleep暂停功能代码
2010/09/03 Javascript
jquery和javascript中如何将一元素的内容赋给另一元素
2014/01/09 Javascript
Javascript让DEDECMS告别手写Tag
2014/09/01 Javascript
IE6浏览器中window.location.href无效的解决方法
2014/11/20 Javascript
javascript结合fileReader 实现上传图片
2015/01/30 Javascript
JavaScript中的函数嵌套使用
2015/06/04 Javascript
JavaScript实现广告的关闭与显示效果实例
2015/07/02 Javascript
JS+CSS实现精美的二级导航效果代码
2015/09/17 Javascript
AngularJS ng-template寄宿方式用法分析
2016/11/07 Javascript
vue学习笔记之指令v-text && v-html && v-bind详解
2017/05/12 Javascript
Vue.js中的computed工作原理
2018/03/22 Javascript
vue+axios+element ui 实现全局loading加载示例
2018/09/11 Javascript
如何优雅地在vue中添加权限控制示例详解
2019/03/07 Javascript
Nuxt配置Element-UI按需引入的操作方法
2020/07/06 Javascript
详解Vue中Axios封装API接口的思路及方法
2020/10/10 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
2020/10/29 Javascript
vant-ui组件调用Dialog弹窗异步关闭操作
2020/11/04 Javascript
[44:41]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python Web框架Flask信号机制(signals)介绍
2015/01/01 Python
Django框架设置cookies与获取cookies操作详解
2019/05/27 Python
Anaconda之conda常用命令介绍(安装、更新、删除)
2019/10/06 Python
CSS Grid布局教程之什么是网格布局
2014/12/30 HTML / CSS
html5的canvas实现3d雪花飘舞效果
2013/12/27 HTML / CSS
一些高难度的SQL面试题
2016/11/29 面试题
英文简历中的自我评价
2013/10/06 职场文书
写自荐信的七个技巧
2013/10/15 职场文书
公务员个人自我评价分享
2013/11/06 职场文书
公务员群众路线专题民主生活会发言材料
2014/09/17 职场文书
会议通知
2015/04/15 职场文书
捐书仪式主持词
2015/07/04 职场文书
七年级作文之我的梦想
2019/10/16 职场文书