使用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下载FTP上的文件夹的实现代码
Feb 10 Python
Python操作MongoDB数据库PyMongo库使用方法
Apr 27 Python
Python中pygame安装方法图文详解
Nov 11 Python
python3实现UDP协议的服务器和客户端
Jun 14 Python
linux环境下python中MySQLdb模块的安装方法
Jun 16 Python
使用Python操作excel文件的实例代码
Oct 15 Python
Tensorflow 利用tf.contrib.learn建立输入函数的方法
Feb 08 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
Jul 18 Python
python实现小程序推送页面收录脚本
Apr 20 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
Jun 03 Python
大数据分析用java还是Python
Jul 06 Python
python 如何利用argparse解析命令行参数
Sep 11 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
星际中一些鲜为人知的详细资料
2020/03/04 星际争霸
PHP类的使用 实例代码讲解
2009/12/28 PHP
DedeCMS dede_channeltype表字段注释
2010/04/07 PHP
php 在windows下配置虚拟目录的方法介绍
2013/06/26 PHP
php二维数组转成字符串示例
2014/02/17 PHP
Yii使用ajax验证显示错误messagebox的解决方法
2014/12/03 PHP
Mac下关于PHP环境和扩展的安装详解
2019/10/17 PHP
在线编辑器的实现原理(兼容IE和FireFox)
2007/03/09 Javascript
HTML中Select不用Disabled实现ReadOnly的效果
2008/04/07 Javascript
网页中的图片的处理方法与代码
2009/11/26 Javascript
网页中CDATA标记的说明
2010/09/12 Javascript
jQuery Tools Dateinput使用介绍
2012/07/14 Javascript
JS中prototype关键字的功能介绍及使用示例
2013/07/21 Javascript
图片动画横条广告带上下滚动可自定义图片、链接等等
2013/10/20 Javascript
js字符串完全替换函数分享
2014/12/03 Javascript
JavaScript按值删除数组元素的方法
2015/04/24 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
2016/08/03 Javascript
javascript 组合按键事件监听实现代码
2017/02/21 Javascript
利用vue + koa2 + mockjs模拟数据的方法教程
2017/11/22 Javascript
vue-cli2与vue-cli3在一台电脑共存的实现方法
2019/09/25 Javascript
ES6中的Javascript解构的实现
2020/10/30 Javascript
Python学习笔记之常用函数及说明
2014/05/23 Python
使用Python的Supervisor进行进程监控以及自动启动
2014/05/29 Python
python 实现将字典dict、列表list中的中文正常显示方法
2018/07/06 Python
Python 的字典(Dict)是如何存储的
2019/07/05 Python
Python shutil模块用法实例分析
2019/10/02 Python
Keras实现将两个模型连接到一起
2020/05/23 Python
介绍CSS3使用技巧5个
2009/04/02 HTML / CSS
处理textarea中的换行和空格
2019/12/12 HTML / CSS
尤妮佳moony海外旗舰店:日本殿堂级纸尿裤品牌
2018/02/23 全球购物
暑期社会实践先进个人主要事迹
2014/05/22 职场文书
小学语文教学经验交流材料
2014/06/02 职场文书
食品安全标语
2014/06/07 职场文书
公务员年度考核评语
2014/12/31 职场文书
大国崛起英国观后感
2015/06/02 职场文书
员工规章制度范本
2015/08/07 职场文书