使用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 相关文章推荐
Django开发中复选框用法示例
Mar 20 Python
解决vscode python print 输出窗口中文乱码的问题
Dec 03 Python
Python从数据库读取大量数据批量写入文件的方法
Dec 10 Python
python 处理数字,把大于上限的数字置零实现方法
Jan 28 Python
Django-Model数据库操作(增删改查、连表结构)详解
Jul 17 Python
你还在@微信官方?聊聊Python生成你想要的微信头像
Sep 25 Python
python进程池实现的多进程文件夹copy器完整示例
Nov 27 Python
python安装和pycharm环境搭建设置方法
May 27 Python
python主要用于哪些方向
Jul 05 Python
PyTorch安装与基本使用详解
Aug 31 Python
Python的flask接收前台的ajax的post数据和get数据的方法
Apr 12 Python
Python基于百度AI实现抓取表情包
Jun 27 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
全国FM电台频率大全 - 24 贵州省
2020/03/11 无线电
php分页函数完整实例代码
2014/09/22 PHP
phplot生成图片类用法详解
2015/01/06 PHP
YII视图整合kindeditor扩展的方法
2016/07/13 PHP
解决laravel 5.1报错:No supported encrypter found的办法
2017/06/07 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
Laravel 框架控制器 Controller原理与用法实例分析
2020/04/14 PHP
ArrayList类(增强版)
2007/04/04 Javascript
JS获取select-option-text_value的方法
2013/12/26 Javascript
Jquery响应回车键直接提交表单操作代码
2014/07/25 Javascript
script标签属性用type还是language
2015/01/21 Javascript
封装了jQuery的Ajax请求全局配置
2015/02/05 Javascript
javascript实现详细时间提醒信息效果的方法
2015/03/11 Javascript
JavaScript实现函数返回多个值的方法
2015/06/09 Javascript
省市区三级联动下拉框菜单javascript版
2015/08/11 Javascript
jQuery使用each方法与for语句遍历数组示例
2016/06/16 Javascript
javascript 中select框触发事件过程的分析
2017/08/01 Javascript
在react-router4中进行代码拆分的方法(基于webpack)
2018/03/08 Javascript
在 vue-cli v3.0 中使用 SCSS/SASS的方法
2018/06/14 Javascript
layui-table获得当前行的上/下一行数据的例子
2019/09/24 Javascript
[01:13]DOTA2群星解读国服召集令 一起说出回归的理由
2013/07/17 DOTA
Python获取当前时间的方法
2014/01/14 Python
Python 实现链表实例代码
2017/04/07 Python
Python实现JSON反序列化类对象的示例
2018/01/31 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
2019/11/19 Python
Django使用Celery加redis执行异步任务的实例内容
2020/02/20 Python
英国性感内衣和睡衣品牌:Bluebella
2018/01/26 全球购物
MATCHESFASHION.COM美国官网:英国奢侈品零售商
2018/10/29 全球购物
Rosetta Stone官方网站:语言学习
2019/01/05 全球购物
体育教学随笔感言
2014/02/24 职场文书
春节晚会主持词
2014/03/24 职场文书
演讲比赛策划方案
2014/06/11 职场文书
中专生自荐信
2014/06/25 职场文书
就业协议书盖章的注意事项
2014/09/28 职场文书
MySQL 常见的数据表设计误区汇总
2021/06/07 MySQL
使用Ajax实现无刷新上传文件
2022/04/12 Javascript