使用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实现TCP服务器端与客户端的方法详解
Apr 30 Python
django限制匿名用户访问及重定向的方法实例
Feb 07 Python
Django 使用logging打印日志的实例
Apr 28 Python
Python操作word常见方法示例【win32com与docx模块】
Jul 17 Python
python2与python3共存问题的解决方法
Sep 18 Python
局域网内python socket实现windows与linux间的消息传送
Apr 19 Python
详解numpy的argmax的具体使用
May 27 Python
Python3离线安装Requests模块问题
Oct 13 Python
pytorch如何冻结某层参数的实现
Jan 10 Python
Keras实现支持masking的Flatten层代码
Jun 16 Python
python用什么编辑器进行项目开发
Jun 17 Python
解决selenium+Headless Chrome实现不弹出浏览器自动化登录的问题
Jan 09 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+MSSQL分页的例子
2006/10/09 PHP
php 获取远程网页内容的函数
2009/09/08 PHP
实现PHP多线程异步请求的3种方法
2014/01/17 PHP
php限制上传文件类型并保存上传文件的方法
2015/03/13 PHP
简单谈谈favicon
2015/06/10 PHP
基于PHP实现假装商品限时抢购繁忙的效果
2015/10/16 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
php实现简单的权限管理的示例代码
2017/08/25 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
jQuery maxlength文本字数限制插件
2010/04/16 Javascript
JavaScript可否多线程? 深入理解JavaScript定时机制
2012/05/23 Javascript
关闭ie窗口清除Session的解决方法
2014/01/10 Javascript
jquery中的ajax方法怎样通过JSONP进行远程调用
2014/05/04 Javascript
jquery通过select列表选择框对表格数据进行过滤示例
2014/05/07 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
2014/09/04 Javascript
Extjs grid panel自带滚动条失效的解决方法
2014/09/11 Javascript
个人总结的一些JavaScript技巧、实用函数、简洁方法、编程细节
2015/06/10 Javascript
阿里巴巴技术文章分享 Javascript继承机制的实现
2016/01/14 Javascript
vue.js初学入门教程(2)
2016/11/07 Javascript
vue多次循环操作示例
2019/02/08 Javascript
layui 富文本编辑器和textarea值的相互传递方法
2019/09/18 Javascript
vue实现一个矩形标记区域(rectangle marker)的方法
2020/10/28 Javascript
Python计算字符宽度的方法
2016/06/14 Python
python实现邮件自动发送
2019/08/10 Python
tesserocr与pytesseract模块的使用方法解析
2019/08/30 Python
python调用c++返回带成员指针的类指针实例
2019/12/12 Python
matplotlib quiver箭图绘制案例
2020/04/17 Python
Python使用多进程运行含有任意个参数的函数
2020/05/02 Python
俄罗斯美容和健康网上商店:Созвездие Красоты
2019/07/23 全球购物
预订旅游活动、景点和旅游:GetYourGuide
2019/09/29 全球购物
Linden Leaves官网:新西兰纯净护肤品
2020/12/20 全球购物
Woods官网:加拿大最古老、最受尊敬的户外品牌之一
2020/09/12 全球购物
保护环境的标语
2014/06/09 职场文书
优秀学生干部主要事迹材料
2015/11/04 职场文书
2019年幼儿园家长接送责任书
2019/10/29 职场文书
Python 数据科学 Matplotlib图库详解
2021/07/07 Python