文档章节

Python获取本机资源使用信息

阿帆提
 阿帆提
发布于 2016/11/09 10:00
字数 585
阅读 35
收藏 4
点赞 0
评论 0
__author__ = 'root'
# -*- encoding: utf-8 -*-
# machine_status.py  获取本机资源使用信息、进程状态和连接情况
# May 2014


import datetime
import json
import os
import psutil as ps                       # psutil库 需预先安装
#from pymongo import Connection
import time
import socket
import uuid


class MachineStatus(object):

    #   初始化
    def __init__(self):
        self.MAC = None
        self.IP = None
        self.cpu = {}
        self.mem = {}
        self.process = {}
        self.network = {}
        self.status = []                    #  [cpu使用率, 内存使用率, 进程数目, established连接数]
        self.get_init_info()
        self.get_status_info()

    #  宿主机存库状态
    def run(self):
        self.get_status_info()
        self.save_status_to_db()

    def save_status_to_db(self):
        print self.status

    #  数据收集
    def get_init_info(self):
        self.cpu = {'cores' : 0,            #  cpu逻辑核数
                    'percent' : 0,          #  cpu使用率
                    'system_time' : 0,      #  内核态系统时间
                    'user_time' : 0,        #  用户态时间
                    'idle_time' : 0,        #  空闲时间
                    'nice_time' : 0,        #  nice时间 (花费在调整进程优先级上的时间)
                    'softirq' : 0,          #  软件中断时间
                    'irq' : 0,              #  中断时间
                    'iowait' : 0}           #  IO等待时间
        self.mem = {'percent' : 0,
                    'total' : 0,
                    'vailable' : 0,
                    'used' : 0,
                    'free' : 0,
                    'active' : 0}
        self.process = {'count' : 0,        #  进程数目
                        'pids' : 0}         #  进程识别号
        self.network = {'count' : 0,        #  连接总数
                        'established' : 0}  #  established连接数
        self.status = [0, 0, 0, 0]          #  cpu使用率,内存使用率, 进程数, established连接数
        self.get_mac_address()
        self.get_ip_address()

    #  获取状态列表
    def get_status_info(self):
        self.get_cpu_info()
        self.get_mem_info()
        self.get_process_info()
        self.get_network_info()
        self.status[0] = self.cpu['percent']
        self.status[1] = self.mem['percent']
        self.status[2] = self.process['count']
        self.status[3] = self.network['established']

    #  获取mac
    def get_mac_address(self):
        mac = uuid.UUID(int=uuid.getnode()).hex[-12:]
        self.MAC = ":".join([mac[e : e+2] for e in range(0, 11, 2)])

    #  获取ip
    def get_ip_address(self):
        tempSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        tempSock.connect(('8.8.8.8', 80))
        addr = tempSock.getsockname()[0]
        tempSock.close()
        self.IP = addr

    #  获得cpu信息
    def get_cpu_info(self):
        self.cpu['cores'] = ps.cpu_count()
        self.cpu['percent'] = ps.cpu_percent(interval=2)
        cpu_times = ps.cpu_times()
        self.cpu['system_time'] = cpu_times.system
        self.cpu['user_time'] = cpu_times.user
        self.cpu['idle_time'] = cpu_times.idle
        self.cpu['nice_time'] = cpu_times.nice
        self.cpu['softirq'] = cpu_times.softirq
        self.cpu['irq'] = cpu_times.irq
        self.cpu['iowait'] = cpu_times.iowait

    #  获得memory信息
    def get_mem_info(self):
        mem_info = ps.virtual_memory()
        self.mem['percent'] = mem_info.percent
        self.mem['total'] = mem_info.total
        self.mem['vailable'] = mem_info.available
        self.mem['used'] = mem_info.used
        self.mem['free'] = mem_info.free
        self.mem['active'] = mem_info.active

    #  获取进程信息
    def get_process_info(self):
       pids = ps.pids()
       self.process['pids'] = pids
       self.process['count'] = len(pids)

    #  获取网络数据
    def get_network_info(self):
        conns = ps.net_connections()
        self.network['count'] = len(conns)
        count = 0
        for conn in conns:
           if conn.status is 'ESTABLISHED':
               count = count + 1
        self.network['established'] = count


class HostInfoManage(object):
    @staticmethod
    def get_host_cpu_info():
        MS = MachineStatus()
        cpu_info = MS.cpu
        return {"percent": cpu_info.get("percent", 0)}

    @staticmethod
    def get_host_memory_info():
        MS = MachineStatus()
        mem_info = MS.mem
        return {"percent": mem_info.get("percent", 0)}

    @staticmethod
    def get_host_ip_info():
        MS = MachineStatus()
        return {"ip": MS.IP}

    @staticmethod
    def get_host_mac_info():
        MS = MachineStatus()
        return {"ip": MS.MAC}

    @staticmethod
    def get_disk_used_info():
        return {"percent": HostInfoManage.disk_stat() * 100}

    @staticmethod
    def disk_stat():
        import os
        hd={}
        disk = os.statvfs("/")
        hd['available'] = disk.f_bsize * disk.f_bavail
        hd['capacity'] = disk.f_bsize * disk.f_blocks
        hd['used'] = disk.f_bsize * disk.f_bfree
        return float(hd['used']) / float(hd['capacity'])


if __name__ == '__main__':
    MS = MachineStatus()
    print MS.IP, '\n', MS.MAC, '\n', MS.cpu, '\n', MS.mem, '\n', MS.status


#获取硬盘使用情况

def disk_stat():
    import os
    hd={}
    disk = os.statvfs("/")
    hd['available'] = disk.f_bsize * disk.f_bavail
    hd['capacity'] = disk.f_bsize * disk.f_blocks
    hd['used'] = disk.f_bsize * disk.f_bfree
    print float(hd['used']) / float(hd['capacity'])
    return hd

 

© 著作权归作者所有

共有 人打赏支持
阿帆提
粉丝 8
博文 54
码字总数 188729
作品 0
朝阳
程序员
人生苦短之HTTP协议及Requests库的方法

requests库的主要方法:requests.request()构造一个请求    requests.get()获取HTML网页的主要方法,对应于HTTP的GET    requests.head()获取HTML网页头的方法,对应于HTTP的HEAD   ...

p柯西 ⋅ 06/14 ⋅ 0

Python远程连接服务器上的Oracle数据库

Python远程连接服务器上的Oracle数据库 1、正确的开启方式 在你的IPython或者是Anaconda的jupyter中输入一下代码,其中: ‘username’—— 用户名 ‘password’——密码 ‘192.168.1.1:1521/...

推荐码发放 ⋅ 05/04 ⋅ 0

jira-python模块的功能介绍和一些基础的翻译。

最近要研究zabbix配合jira创建一些工单,方便对一些问题进行跟进和记录。 jira API在5.0开始启用,然后搜了下,有相关的API模块,因为依赖关系要下一些被屏蔽的地址上的包,或者相关包下载下...

余二五 ⋅ 2017/11/15 ⋅ 0

python访问memcached

python访问memcached memcached介绍 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动...

laoba ⋅ 05/21 ⋅ 0

使用python实现mqtt的发布和订阅

import paho.mqtt.client as mqtt HOST = "101.200.46.138"PORT = 1883 def test(): if name == 'main': import paho.mqtt.client as mqtt MQTTHOST = "101.200.46.138"MQTTPORT = 1883mqttC......

xxmonstor ⋅ 05/28 ⋅ 0

万方数据库,文献下载的准备,文献信息收集

想批量下载万方数据库的文献,看了一下其html源码不好玩啊. 其一篇文献的下载的链接. 下 载 onclick 事件 onclick 事件会在对象被点击时发生。 请注意, oncli...

东风冷雪 ⋅ 05/23 ⋅ 0

一个月入门Python爬虫,快速获取大规模数据

数据是创造和决策的原材料,高质量的数据都价值不菲。而利用爬虫,我们可以获取大量的价值数据,经分析可以发挥巨大的价值,比如: 豆瓣、知乎:爬取优质答案,筛选出各话题下热门内容,探索...

Python开发者 ⋅ 04/25 ⋅ 0

Centos7下安装python3并安装虚拟环境

引言 服务器自带的python版本大多是2.X,而且有些系统应用依赖于默认的python环境。但有时候要用到python3,为了不与系统的python环境相冲突,就新安装python3版本并使用虚拟环境。 安装准备...

_缘君_ ⋅ 05/02 ⋅ 0

GyoiThon 新一代渗透工具采坑集

最好使用python3的环境 本次使用python2.7环境 1.关于kalipython切换 打开终端分别输入下面两条命令: update-alternatives --install /usr/bin/python python /usr/bin/python2 100 update...

harry1080 ⋅ 04/15 ⋅ 0

用MaxCompute Studio开发Python UDF(附采坑记录)

1.环境 系统:MacOS 系统自带Python版本(/usr/bin/python):2.7.10 Anaconda Python版本:2.7.14 Maxcompute Studio版本: 2.9.1 2.安装Python|Pyodps|Python插件 MaxCompute studio能支持用......

watercat ⋅ 05/24 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

笔试题之Java基础部分【简】【一】

基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法,其他 1.length、length()和size() length针对...

anlve ⋅ 29分钟前 ⋅ 2

table eg

user_id user_name full_name 1 zhangsan 张三 2 lisi 李四 `` ™ [========] 2018-06-18 09:42:06 星期一½ gdsgagagagdsgasgagadsgdasgagsa...

qwfys ⋅ 53分钟前 ⋅ 0

一个有趣的Java问题

先来看看源码: public class TestDemo { public static void main(String[] args) { Integer a = 10; Integer b = 20; swap(a, b); System.out......

linxyz ⋅ 58分钟前 ⋅ 0

十五周二次课

十五周二次课 17.1mysql主从介绍 17.2准备工作 17.3配置主 17.4配置从 17.5测试主从同步 17.1mysql主从介绍 MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主...

河图再现 ⋅ 今天 ⋅ 0

docker安装snmp rrdtool环境

以Ubuntu16:04作为基础版本 docker pull ubuntu:16.04 启动一个容器 docker run -d -i -t --name flow_mete ubuntu:16.04 bash 进入容器 docker exec -it flow_mete bash cd ~ 安装基本软件 ......

messud4312 ⋅ 今天 ⋅ 0

OSChina 周一乱弹 —— 快别开心了,你还没有女友呢。

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享吴彤的单曲《好春光》 《好春光》- 吴彤 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :小萝莉街上乱跑,误把我认错成...

小小编辑 ⋅ 今天 ⋅ 8

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

Linux下php访问远程ms sqlserver

1、安装freetds(略,安装在/opt/local/freetds 下) 2、cd /path/to/php-5.6.36/ 进入PHP源码目录 3、cd ext/mssql进入MSSQL模块源码目录 4、/opt/php/bin/phpize生成编译配置文件 5、 . ./...

wangxuwei ⋅ 昨天 ⋅ 0

如何成为技术专家

文章来源于 -- 时间的朋友 拥有良好的心态。首先要有空杯心态,用欣赏的眼光发现并学习别人的长处,包括但不限于工具的使用,工作方法,解决问题以及规划未来的能力等。向别人学习的同时要注...

长安一梦 ⋅ 昨天 ⋅ 0

Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令...

刘祖鹏 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部