使用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 web程序
Sep 11 Python
使用Python编写提取日志中的中文的脚本的方法
Apr 30 Python
python使用wmi模块获取windows下的系统信息 监控系统
Oct 27 Python
Python 两个列表的差集、并集和交集实现代码
Sep 21 Python
定制FileField中的上传文件名称实例
Aug 23 Python
Python Requests库基本用法示例
Aug 20 Python
python调用百度地图WEB服务API获取地点对应坐标值
Jan 16 Python
python多线程http压力测试脚本
Jun 25 Python
python基于递归解决背包问题详解
Jul 03 Python
python利用tkinter实现屏保
Jul 30 Python
python3实现elasticsearch批量更新数据
Dec 03 Python
python打印文件的前几行或最后几行教程
Feb 13 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获取金书网的书名的实现代码
2010/06/11 PHP
使用php检测用户当前使用的浏览器是否为IE浏览器
2013/12/03 PHP
各种快递查询--Api接口
2016/04/26 PHP
thinkphp3.2同时连接两个数据库的简单方法
2019/08/13 PHP
PHP数组array类常见操作示例
2020/05/15 PHP
THINKPHP5分页数据对象处理过程解析
2020/10/28 PHP
javascript正则表达式中的replace方法详解
2015/04/20 Javascript
jquery实现邮箱自动填充提示功能
2015/11/17 Javascript
高性能JavaScript循环语句和条件语句
2016/01/20 Javascript
js绑定事件和解绑事件
2017/04/27 Javascript
Vue中render函数的使用方法
2018/01/31 Javascript
ng-alain表单使用方式详解
2018/07/10 Javascript
微信小程序支付PHP代码
2018/08/23 Javascript
浅谈vue3中effect与computed的亲密关系
2019/10/10 Javascript
NodeJs crypto加密制作token的实现代码
2019/11/15 NodeJs
小程序选项卡以及swiper套用(跨页面)
2020/06/19 Javascript
[00:15]TI9观赛名额抽取
2019/07/10 DOTA
在Python中使用列表生成式的教程
2015/04/27 Python
python实现俄罗斯方块游戏
2020/03/25 Python
Python英文文本分词(无空格)模块wordninja的使用实例
2019/02/20 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
2019/02/21 Python
python文件操作的简单方法总结
2019/11/07 Python
通过实例简单了解Python中yield的作用
2019/12/11 Python
python查看矩阵的行列号以及维数方式
2020/05/22 Python
Keras自定义实现带masking的meanpooling层方式
2020/06/16 Python
基于Python正确读取资源文件
2020/09/14 Python
优质有机椰子产品:Dr. Goerg
2019/09/24 全球购物
初三化学教学反思
2014/01/23 职场文书
个人能力自我鉴赏
2014/01/25 职场文书
保护环境的建议书
2014/03/12 职场文书
超市创业计划书
2014/04/24 职场文书
求职信标题怎么写
2014/05/26 职场文书
银行求职信范文怎么写
2015/03/20 职场文书
校车安全管理责任书
2015/05/11 职场文书
Python中使用subprocess库创建附加进程
2021/05/11 Python