使用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实现带错误处理功能的远程文件读取方法
Apr 29 Python
使用Python操作excel文件的实例代码
Oct 15 Python
python编写微信远程控制电脑的程序
Jan 05 Python
numpy使用技巧之数组过滤实例代码
Feb 03 Python
一篇文章读懂Python赋值与拷贝
Apr 19 Python
mac PyCharm添加Python解释器及添加package路径的方法
Oct 29 Python
python requests爬取高德地图数据的实例
Nov 10 Python
对Python Class之间函数的调用关系详解
Jan 23 Python
python利用re,bs4,requests模块获取股票数据
Jul 29 Python
python生成器用法实例详解
Nov 22 Python
如何用Python和JS实现的Web SSH工具
Feb 23 Python
Python编程编写完善的命令行工具
Sep 15 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控制文件下载速度的方法
2015/03/24 PHP
PHP命名空间namespace的定义方法详解
2017/03/29 PHP
php正则表达式基本知识与应用详解【经典教程】
2017/04/17 PHP
php实现构建排除当前元素的乘积数组方法
2018/10/06 PHP
html数组字符串拼接的最快方法
2009/09/16 Javascript
JavaScript获取onclick、onchange等事件值的代码
2013/07/22 Javascript
jQuery实现统计输入文字个数的方法
2015/03/11 Javascript
JS实现自动变换的菜单效果代码
2015/09/09 Javascript
基于jQuery实现的仿百度首页滑动选项卡效果代码
2015/11/16 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
2016/03/09 Javascript
打造自己的jQuery插件入门教程
2016/09/23 Javascript
JavaScript prototype属性详解
2016/10/25 Javascript
js实现无缝滚动图
2017/02/22 Javascript
js轮播图无缝滚动效果
2017/06/17 Javascript
详谈innerHTML innerText的使用和区别
2017/08/18 Javascript
JavaScript实现的原生态Tab标签页功能【兼容IE6】
2017/09/18 Javascript
Ionic学习日记实现验证码倒计时
2018/02/08 Javascript
优化Vue项目编译文件大小的方法步骤
2019/05/27 Javascript
JavaScript 格式化数字、金额、千分位、保留几位小数、舍入舍去
2019/07/23 Javascript
VueQuillEditor富文本上传图片(非base64)
2020/06/03 Javascript
vue开发简单上传图片功能
2020/06/30 Javascript
vue element ui validate 主动触发错误提示操作
2020/09/21 Javascript
Vue绑定用户接口实现代码示例
2020/11/04 Javascript
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
Python实现的redis分布式锁功能示例
2018/05/29 Python
Python玩转Excel的读写改实例
2019/02/22 Python
python 用所有标点符号分隔句子的示例
2019/07/15 Python
Python迭代器iterator生成器generator使用解析
2019/10/24 Python
pytorch 实现删除tensor中的指定行列
2020/01/13 Python
CSS3近阶段篇之酷炫的3D旋转透视
2016/04/28 HTML / CSS
美国餐厅用品和厨房设备批发网站:KaTom Restaurant Supply
2018/01/27 全球购物
美国社交购物市场:MassGenie
2019/02/18 全球购物
高中教师考核方案
2014/05/18 职场文书
元旦晚会活动总结
2014/07/09 职场文书
2016先进工作者事迹材料
2016/02/25 职场文书
springboot读取nacos配置文件
2022/05/20 Java/Android