python3监控系统资源最终版(获取CPU,内存,磁盘,网卡等信息),返回json格式。
- #!/usr/bin/env python3
- #-*- coding:utf-8 -*-
- #create at 2018-12-07
- 'this is a system monitor scripts'
- __author__="yjt"
- import os
- import time
- import sys
- import datetime
- import socket
- import psutil
- import re
- import json
- #以下是变量值,自己定义
- CPUT = 2 #计算CPU利用率的时间间隔
- NETT = 2 #计算网卡流量的时间间隔"""
- #LOOPT = 2 """#脚本循环时间间隔"""
- #获取系统基本信息"""
- def baseinfo():
- hostname = socket.gethostname()
- user_conn = len(psutil.users())
- start_time = datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S")
- now_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
- # sys_runtime = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time() - psutil.boot_time()))
- sys_runtime = os.popen('w').readline().split('users')[0].split('up')[1].strip()[:-1].strip()[:-1]
- process = os.popen('ps -ef |wc -l').read().split()[0]
- value = {"hostname":hostname,"user_conn":user_conn,"sys_start_time":start_time,"now_time":now_time,"sys_runtime":sys_runtime,"process":process}
- value_json = json.dumps(value)
- return value_json
- print('')
- print(baseinfo())
- #获取CPU信息
- def cpuinfo():
- ave_load = os.popen('uptime').readline().split(":")[-1].split()
- ave_load = ' '.join(ave_load) #CPU平均负载
- #以下四项值都是获取的瞬时值
- user_time = psutil.cpu_times().user #用户态使用CPU时间
- sys_time = psutil.cpu_times().system #系统态使用CPU时间
- idle_time = psutil.cpu_times().idle #CPU空闲时间
- iowait_time = psutil.cpu_times().iowait #IO等待时间
- total_cpu = 0
- for i in range(len(psutil.cpu_times())):
- total_cpu += psutil.cpu_times()[i]
- user_use = str(round(user_time / total_cpu * 100,2)) + '%'
- sys_use = str(round(sys_time / total_cpu * 100,2)) + '%'
- idle = str(round(idle_time / total_cpu * 100,2)) + '%'
- iowait = str(round(iowait_time / total_cpu * 100,2)) + '%'
- cpu_pre = str(psutil.cpu_percent(CPUT)) + "%"
- logical_cpu = psutil.cpu_count()
- pyhsical_cpu = psutil.cpu_count(logical=False)
- #获取CPU使用最高的前十行
- #top10 = len(os.popen('ps aux|grep -v PID|sort -rn -k +3|head -10').readlines())
- # dic1 = {"ave_load":ave_load,"user_use":user_use,"sys_use":sys_use,"idle":idle,"iowait":iowait,"cpu_pre":cpu_pre,"logical_cpu":logical_cpu,"pyhsical_cpu":pyhsical_cpu}
- l1,l2,l3,l4,l5,l6 = [],[],[],[],[],[]
- i = 0
- while i < 10:
- #user = os.popen('ps aux|grep -v PID|sort -rn -k +4|head').readlines().[info].split()[0]
- #pid = int(os.popen('ps aux|grep -v PID|sort -rn -k +3|head -10').readlines()[i].split()[1])
- #a = os.popen('ps aux |sort -k3 -nr').readlines()[i].split()
- try:
- info = ''
- info = psutil.Process(int(os.popen("ps aux|grep -v PID|sort -rn -k +3").readlines()[i].split()[1]))
- #if bool(info):
- #pid = psutil.Process(int(os.popen('ps aux|grep -v PID|sort -rn -k +3').readlines()[i].split()[1])).pid
- pid = info.pid
- user = info.username()
- process_name = info.name()
- cpu_use = str(info.cpu_percent()) + '%'
- status = info.status()
- l1.append(user)
- l2.append(pid)
- l3.append(cpu_use)
- l4.append(process_name)
- l5.append(status)
- i += 1
- except:
- pass
- continue
- c0 = []
- l = ["user","pid","cpu_use","process_name","status"]
- cpu_value = list(zip(l1,l2,l3,l4,l5))
- cpu_len = len(cpu_value)
- for i in range(cpu_len):
- c0.append(dict(zip(l,cpu_value[i])))
- #def cpu():
- #以下获取的是逻辑CPU的瞬时值
- with open('/proc/stat','r') as f:
- cpu_item = f.readlines()
- cpu_number,cpu_use = [],[]
- for i in cpu_item:
- if re.search("^cpu[0-9]{1,}",i):
- cpu_info = i
- cpu_info = cpu_info.split(' ')
- #cpu_number = cpu_info[0]
- cpu_number.append(cpu_info[0])
- cpu_total = 0
- for num in cpu_info:
- if num.isdigit():
- cpu_total += float(num)
- cpu_free = float(cpu_info[4])
- cpu_u = str(round((1 - cpu_free / cpu_total) * 100 ,2)) + '%'
- cpu_list = cpu_u.split()
- cpu_str = ''.join(cpu_list)
- cpu_use.append(cpu_str)
- c1 = []
- cpu_l = ["cpu_number","cpu_use"]
- cpu_v = list(zip(cpu_number,cpu_use))
- cpu_len = len(cpu_v)
- for i in range(cpu_len):
- c1.append(dict(zip(cpu_l,cpu_v[i])))
- value = {
- "ave_load":ave_load,
- "user_use":user_use,
- "sys_use":sys_use,
- "idle":idle,
- "iowait":iowait,
- "cpu_pre":cpu_pre,
- "logical_cpu":logical_cpu,
- "pyhsical_cpu":pyhsical_cpu,
- "logical_cpu_use":c1,
- "cpu_top10":c0
- }
- value_json = json.dumps(value)
- return value_json
- print('')
- print(cpuinfo())
- #cpuinfo()
- #获取内存信息
- def meminfo():
- total_mem = str(round(psutil.virtual_memory().total / 1024 /1024/1024)) + 'G'
- use_mem = str(round(psutil.virtual_memory().used / 1024 /1024/1024)) + 'G'
- mem_percent = str(psutil.virtual_memory().percent) + '%'
- free_mem = str(round(psutil.virtual_memory().free / 1024 /1024/1024)) + 'G'
- swap_mem = str(round(psutil.swap_memory().total / 1024 /1024/1024)) + "G"
- swap_use = str(round(psutil.swap_memory().used / 1024 /1024/1024 )) + 'G'
- swap_free = str(round(psutil.swap_memory().free / 1024 /1024/1024)) + 'G'
- swap_percent = str(psutil.swap_memory().percent) + '%'
- #获取memory使用最高的前十行
- #top10 = len(os.popen('ps aux|grep -v PID|sort -rn -k +4|head -10').readlines())
- # dic1 = {"ave_load":ave_load,"user_use":user_use,"sys_use":sys_use,"idle":idle,"iowait":iowait,"cpu_pre":cpu_pre,"logical_cpu":logical_cpu,"pyhsical_cpu":pyhsical_cpu}
- l1,l2,l3,l4,l5,l6 = [],[],[],[],[],[]
- i = 0
- while i < 10:
- #user = os.popen('ps aux|grep -v PID|sort -rn -k +4|head').readlines().[info].split()[0]
- #pid = int(os.popen('ps aux|grep -v PID|sort -rn -k +4|head -10').readlines()[i].split()[1])
- try:
- info = psutil.Process(int(os.popen('ps aux|grep -v PID|sort -rn -k +4').readlines()[i].split()[1]))
- pid = info.pid
- user = info.username()
- process_name = info.name()
- mem_use = str(round(info.memory_percent(),2)) + '%'
- status = info.status()
- l1.append(user)
- l2.append(pid)
- l3.append(mem_use)
- l4.append(process_name)
- l5.append(status)
- i += 1
- except:
- pass
- continue
- m0 = []
- l = ["user","pid","mem_use","process_name","status"]
- mem_value = list(zip(l1,l2,l3,l4,l5))
- mem_len = len(mem_value)
- for i in range(mem_len):
- m0.append(dict(zip(l,mem_value[i])))
- value = {
- "total_mem":total_mem,
- "use_mem":use_mem,
- "free_mem":free_mem,
- "mem_percent":mem_percent,
- "swap_mem":swap_mem,
- "swap_use":swap_use,
- "swap_free":swap_free,
- "swap_percent":swap_percent,
- "mem_top10":m0
- }
- value_json = json.dumps(value)
- return value_json
- print('')
- print(meminfo())
- #获取磁盘信息
- def diskinfo():
- #print("\033[31mdisk_info:\033[0m")
- #print("disk%-10s total%-10s free%-10s used%-10s percent%-10s"%('','(G)','(G)','(G)','(%)'))
- disk_num = int(''.join(os.popen("ls /dev/sd[a-z]|wc -l").readlines()[0].split()))
- d1,d2,d3,d4,d5 = [],[],[],[],[]
- disk_total,disk_used,disk_free = 0,0,0
- disk_len = len(psutil.disk_partitions())
- for info in range(disk_len):
- disk = psutil.disk_partitions()[info][1]
- if len(disk) < 10:
- d1.append(disk)
- total = str(round(psutil.disk_usage(disk).total /1024/1024/1024)) + 'G'
- total_num = psutil.disk_usage(disk).total
- disk_total += total_num
- free = str(round(psutil.disk_usage(disk).free /1024/1024/1024)) + 'G'
- disk_free += psutil.disk_usage(disk).free
- used = str(round(psutil.disk_usage(disk).used /1024/1024/1024)) + 'G'
- disk_used += psutil.disk_usage(disk).used
- percent = str(psutil.disk_usage(disk).percent) + '%'
- d2.append(total)
- d3.append(free)
- d4.append(used)
- d5.append(percent)
- disk_used_percent = str(round(disk_used / disk_total * 100,2)) + '%'
- disk_free_percent = str(round(disk_free / disk_total * 100,2)) + '%'
- disk_total = str(round(disk_total /1024/1024/1024)) + "G"
- disk_free = str(round(disk_free /1024/1024/1024)) + "G"
- disk_used = str(round(disk_used /1024/1024/1024)) + "G"
- d0 = []
- d = ["mount","total","free","used","percent"]
- disk_value = list(zip(d1,d2,d3,d4,d5))
- disk_len = len(disk_value)
- for i in range(disk_len):
- d0.append(dict(zip(d,disk_value[i])))
- value = {
- "disk":[
- {"disk_num":disk_num},
- {"disk_total":disk_total},
- {"disk_free":disk_free},
- {"disk_used":disk_used},
- {"disk_used_percent":disk_used_percent},
- {"disk_free_percent":disk_free_percent}
- ],
- "partitions":d0
- }
- value_json = json.dumps(value)
- return value_json
- print('')
- print(diskinfo())
- #diskinfo()
- #获取网卡信息
- def netinfo():
- net_item = list(psutil.net_if_addrs())
- n1,n2,n3,n4,n5,n6 = [],[],[],[],[],[]
- for net in net_item:
- if re.search(r'bond.*|em.*|eno.*|^eth.*',net):
- network_card = net
- n1.append(network_card)
- ip = psutil.net_if_addrs()[net][0].address
- ip_len = len(ip.split('.'))
- if ip_len == 4:
- ip =ip
- else:
- ip = 'null'
- n2.append(ip)
- recv_1,recv_2,send_1,send_2=0,0,0,0
- with open ('/proc/net/dev','r') as f:
- net_info = f.readlines()[2:]
- # net_list = str(net_info).lower().split()
- net_len = len(net_info)
- for i in range(net_len):
- net_n_info = net_info[i].split()
- net_list = net_info[i].split(':')[0].strip(' ')
- #print(net_list)
- if net_list == net:
- recv_1 = float(net_n_info[1])
- # print(recv_1)
- send_1 = float(net_n_info[9])
- time.sleep(NETT)
- with open ('/proc/net/dev','r') as f:
- net_info = f.readlines()[2:]
- #net_list = str(net_info).lower().split()
- net_len = len(net_info)
- for i in range(net_len):
- net_n_info = net_info[i].split()
- net_list = net_info[i].split(':')[0].strip(' ')
- if net_list == net:
- recv_2 = float(net_n_info[1])
- #print(recv_2)
- send_2 = float(net_n_info[9])
- received = str(round(recv_2/1024 - recv_1/1024,2)) + "kb/s"
- transmit = str(round(send_2/1024 - send_1/1024,2)) + "kb/s"
- n3.append(transmit)
- n4.append(received)
- #print(n3,n4)
- #网卡带宽
- # net_speed = list(os.popen("ethtool %s|grep -i speed"%(network_card)).readlines())[0].split()[1]
- # n5.append(net_speed)
- #网卡模式
- # net_duplex = list(os.popen("ethtool %s|grep -i Duplex"%(network_card)).readlines())[0].split()[1]
- # n6.append(net_duplex)
- #print (n1,n2,n3,n4)
- n0 = []
- # n = ["network_card","ip","transmit","received","net_speed","net_duplex"]
- n = ["network_card","ip","transmit","received"]
- net_value = list(zip(n1,n2,n3,n4))
- net_len = len(net_value)
- for i in range(net_len):
- n0.append(dict(zip(n,net_value[i])))
- value = {
- "network":n0
- }
- value_json = json.dumps(value)
- return value_json
- print('')
- print(netinfo())
- #netinfo()
- #获取TCP连接数
- def tcpinfo():
- status_list = ["LISTEN","ESTABLISHED","TIME_WAIT","CLOSE_WAIT","LAST_ACK","SYN_SENT"]
- status_init = []
- net_conn = psutil.net_connections()
- n1 = []
- for key in net_conn:
- status_init.append(key.status)
- for value in status_list:
- num = status_init.count(value)
- n1.append(num)
- value = {
- "LISTEN":n1[0],
- "ESTABLISHED":n1[1],
- "TIME_WAIT":n1[2],
- "CLOSE_WAIT":n1[3],
- "LAST_ACK":n1[4],
- "SYN_SENT":n1[5]
- }
- value_json = json.dumps(value)
- return value_json
- print('')
- print(tcpinfo())
注:该脚本也适用于python2,当然,需要安装psutil模块,或者已安装anaconda
python3监控系统资源最终版(获取CPU,内存,磁盘,网卡等信息),返回json格式。的更多相关文章
- Linux 简单命令查询CPU、内存、网卡等信息
[转自]Linux查询CPU.内存.网卡等信息 看CPU信息(型号)# cat /proc/cpuinfo | grep name | cut -f2 -d: |uniq -c 1 Int ...
- linux系统CPU,内存,磁盘,网络流量监控脚本
前序 1,#cat /proc/stat/ 信息包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累积到当前时刻 2,#vmstat –s 或者#vmstat 虚拟内存统计 3, #cat ...
- 一键获取linux内存、cpu、磁盘IO等信息脚本编写,及其原理详解
更多linux知识,请关注公众号:一口Linux 一.脚本 今天主要分享一个shell脚本,用来获取linux系统CPU.内存.磁盘IO等信息. #!/bin/bash # 获取要监控的本地服务器IP ...
- 使用.NET FrameWork获取CPU,内存使用率以及磁盘空间
在以前,我们想获取CPU,内存等信息就不得不借助win32 API来实现.但现在,.NET FrameWork已经把这些API封装到.NET类库中了,所以我们可以借助.NET类库很轻松的获取这些信息. ...
- C# 获取CPU序列号、网卡MAC地址、硬盘序列号封装类,用于软件绑定电脑
using System.Management; namespace GLaLa { /// <summary> /// hardware_mac 的摘要说明. /// </summ ...
- 获取CPU序列号、网卡MAC地址、硬盘序列号
<pre name="code" class="csharp"> using System; using System.Collections; u ...
- AIX/Linux/HP-UX查看CPU/内存/磁盘/存储命令
1.1 硬件环境验证方式 硬件环境主要包括CPU.内存.磁盘/存储.网络设备(如F5等).系统特有设备(如密押设备等)等,其中网络设备和系统特有设备由网络管理员或项目组提供为准,本节主要关注CP ...
- js获取get方式提交的参数返回json格式数据
/** * 获取GET提交的参数 * @return JSON格式 * @author Terry */ function getArgs(){ var args = {}; var match = ...
- linux系统CPU内存磁盘监控发送邮件脚本
#!/bin/bashexport PATHexport LANG=zh_CN.UTF-8###top之后输入数字1,可以查看每颗CPU的情况.###先配置好mailx邮箱账号密码:#cat>/ ...
随机推荐
- FTP搭建注意事项
正常的FTP搭建步骤很简单,随便网搜一篇文章就出来了 下面提出一个网址可供学习 https://blog.csdn.net/m0_38044299/article/details/81627607 但 ...
- .net mvc 迁移到 .netcore
迁移的时候发现,ef6 不能添加 到 .NET Standard2 的类库,因为不兼容, 6 以上的版本只能用于 .net 4.5 以上 只能用别的
- vue+iview 通过a标签实现文件下载
vue+iview 通过a标签实现文件下载 方法一: 注意: 如果下载的文件放在本地目录下,一定要将模板文件放到 public 目录下,否则由于权限问题找不到文件 路径: 项目更目录-->pub ...
- 我们为什么要通过python来入IT这一行
我们为什么要通过python来入IT这一行 导语 这个问题,其实大部分在选择转行做IT,或者在行业内处于边缘化的非技术人员都会有这样的疑惑.毕竟,掌握一门技能,是需要花成本的.决策之前,做个前景判 ...
- restTemplate源码解析(目录)
restTemplate是spring实现的,基于restful风格的http请求模板.使用restTemplate可以简化请求操作的复杂性,同时规范了代码风格.本系列文章,将根据以下目录顺序,从源码 ...
- VBA While Wend循环
在While...Wend循环中,如果条件为True,则会执行所有语句,直到遇到Wend关键字. 如果条件为false,则退出循环,然后控件跳转到Wend关键字后面的下一个语句. 语法 以下是VBA中 ...
- iOS - Scenekit3D引擎初探之 - 给材质贴图
今天简单说一下 SceneKit 给材质贴图. 1,最简单的一种方法,直接打开dae 或者 scn 文件直接设置 如上图,这个dae 文件中只有一个几何体,几何体中只有一个材质球,然后设置材质球的d ...
- 【转载】使用Response.WriteFile输出文件以及图片
Response对象是Asp.Net应用程序中非常重要的一个内置对象,其作用为负责将服务器执行好的信息输出给客户端,可以使用Response.WriteFile方法来像客户端输出文件或者图片,输出图片 ...
- 张量(tensor)的广播
在使用numpy 对张量(数组)进行操作时,两个形状相同的张量进行加减等运算很容易理解,那么不同形状的张量之间的运算是通过广播来实现的.广播实际上很简单,但是弄清楚是也花了不小功夫,这里记录一下. 广 ...
- 【JUC】2.synchronized
synchronized关键字的用法也不做太多笔记了,简单回顾一下: synchronized三种使用方式: 修饰实例方法: 线程获取的是当前调用此方法的对象的对象头:即:锁是当前对象: public ...