python编程练习之四——获取系统内存、CPU、磁盘、平均负载信息并保存到数据库中

准备工作

  • 安装mariadb
  • 安装MySQL-python
  • 测试python中可以导入MySQL并能正常连接数据库
  • 拥有pycharm 开发工具

说明

  • 结果存在数据库 disk_used_db 中的 disk_used_info 表中
  • 程序运行开始若已存在上述数据库可table,则会询问用户使用已存在的数据库还是丢弃已有数据库或者table,另行建立
  • 该函数未写读取数据库内容的函数,需另行读取
  • 每隔5s刷新一次数据,并写入数据库中,30s询问一次是否继续

开始我们的工作

1.项目开始——创建包

在开发环境下新建一个python的包,包内共需要六个python文件:Average_load.py ,conf.py ,cpu_used.py , disk_used.py , mem_used.py ,  main.py 结构如下:

这里写图片描述

2.数据库初始化信息:conf.py

user="root"
passwd="redhat"
host="127.0.0.1"
port=3306

3.读取CPU使用情况:cpu_used.py

import os
def get_cpu_used():
    f = os.popen("top -bi -n 1| awk '{print $2,$4}'").read().split('\n')[2]
    return f.read()

4.读取平均负载情况:Average_load.py

import os
def aver_load():
    f = os.popen("uptime | sed 's/,//g' | awk '{print $8,$9,$10}'")
    return f.read().strip()

5.读取磁盘使用情况:disk_used.py

import os

def get_disk_used():
    f=os.popen("df -h | head -2 | tail -1 |awk '{print $5}'")
    return f.read()

6.读取内存使用情况:mem_used.py

import os
def get_mem_used():
    f = os.popen("free -m |grep Mem |awk '{print $2,$3}'")
    return f.read()

7.主函数:main.py

from __future__ import division
import MySQLdb as mysql
import time, conf
import disk_used, mem_used, cpu_used, Average_load

conn = mysql.connect(user=conf.user, passwd=conf.passwd, host=conf.host, port=conf.port)
cur = conn.cursor()

try:
    cur.execute("create database disk_used_db")
except Exception, e:
    choise = raw_input("database disk_used_db exists,drop? (Y/N)")
    if choise.lower() == "y":
        cur.execute("drop database disk_used_db")
        cur.execute("create database disk_used_db")
        print "drop old database and creating new database(disk_used_db)... "
        time.sleep(1)
        print "creat new database success!!"
    else:
        print "used old database"
conn.select_db("disk_used_db")
try:
    cur.execute("create table disk_used_info(name varchar(20),disk_used varchar(30),mytime varchar(50))")
except Exception, e1:
    choise1 = raw_input("table disk_used_info exists,drop? (Y/N)")
    if choise1.lower() == "y":
        cur.execute("drop table disk_used_info")
        cur.execute("create table disk_used_info(name varchar(20),disk_used varchar(30),mytime varchar(50))")
        print "drop old table and creating new table(disk_used_info)... "
        time.sleep(1)
        print "creat new table success!!"
    else:
        print "used old table"
sql_in = "insert into disk_used_info values(%s,%s,%s)"
start_time = time.time()
while True:

    disk_used_info = disk_used.get_disk_used().strip()

    memuseinfos = map(int, mem.mem_usage().split(' '))
    memtotal = memuseinfos[0]
    memused = memuseinfos[1]
    mem_used_tmp = memused / memtotal
    memory_used = "%.2f%%" % (mem_used_tmp * 100)

    cpuinfo = cpu_used.get_cpu_used()
    cpuinfo_tmp = cpuinfo.split(' ')
    cpu_used_tmp = "%.2f%%" % (cpuinfo_tmp * 100)

    load = Average_load.aver_load().split(' ')
    load1s = load[0] + '%'
    load5s = load[1] + '%'
    load15s = load[2] + '%'

    now = time.asctime()
    cur.execute(sql_in, ("disk_used", disk_used_info, now))
    cur.execute(sql_in, ("mem_used", memory_used, now))
    cur.execute(sql_in, ("cpu_used", cpu_used_tmp, now))
    cur.execute(sql_in, ("Average_load(1s)", load1s, now))
    cur.execute(sql_in, ("Average_load(5s)", load5s, now))
    cur.execute(sql_in, ("Average_load(15s)", load5s, now))

    conn.commit()
    print "saving....."
    time.sleep(5)           ##fresh per 5 second
    end_time = time.time()
    if end_time - start_time >= 30:
        selc = raw_input("Data stored for 30 seconds has been stored,continue?(Y/N)")
        if selc.lower() == "y":
            start_time = time.time()
            continue
        else:
            break

cur.close()
conn.close()
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值