python执行shell获取硬件参数写入mysql的方法


Posted in Python onDecember 29, 2014

本文实例讲述了python执行shell获取硬件参数写入mysql的方法。分享给大家供大家参考。具体分析如下:

最近要获取服务器各种参数,包括cpu、内存、磁盘、型号等信息。试用了Hyperic HQ、Nagios和Snmp,它们功能都挺强大的,但是于需求不是太符,亦或者太heavy。

于是乎想到用python执行shell获取这些信息,python执行shell脚本有以下三种方法:

1. os.system()

os.system('ls')

#返回结果0或者1,不能得到命令的输出

2. os.popen()
output = os.popen('ls')

print output.read()

#打印出的是命令输出,但是得不到执行的返回值

3. commands.getstatusoutput()
(status, output) = commands.getstatusoutput('ls')

print status, output

#打印出返回值和命令输出

可以根据需要选取其中一种方法,以下是python执行shell获取硬件参数写入mysql,并定期更新的程序:
'''

Created on Dec 10, 2014
@author: liufei

'''

#coding=utf-8

import time, sched, os, string

from datetime import datetime

import MySQLdb

 

s = sched.scheduler(time.time,time.sleep)
def event_func():

    try:

        #主机名

        name = os.popen(""" hostname """).read()

        #cpu数目

        cpu_num = os.popen(""" cat /proc/cpuinfo | grep processor | wc -l """).read()

        #内存大小

        mem = os.popen(""" free | grep Mem | awk '{print $2}' """).read()

        #机器品牌

        brand = os.popen(""" dmidecode | grep 'Vendor' | head -1 | awk -F: '{print $2}' """).read()

        #型号

        model = os.popen(""" dmidecode | grep 'Product Name' | head -1 | awk -F: '{print $2}' """).read()

        #磁盘大小

        storage = os.popen(""" fdisk -l | grep 'Disk /dev/sd' | awk 'BEGIN{sum=0}{sum=sum+$3}END{print sum}' """).read()

        #mac地址

        mac = os.popen(""" ifconfig -a | grep HWaddr | head -1 | awk '{print $5}' """).read()

        

        name = name.replace("\n","").lstrip()

        cpu_num =  cpu_num.replace("\n","").lstrip()

        memory_gb = round(string.atof(mem.replace("\n","").lstrip())/1000.0/1000.0, 1)

        brand = brand.replace("\n","").lstrip()

        model = model.replace("\n","").lstrip()

        storage_gb = storage.replace("\n","").lstrip()

        mac = mac.replace("\n","").lstrip()

        

        print name

        print cpu_num

        print memory_gb

        print storage_gb

        print brand

        print model

        print mac

    

        conn=MySQLdb.connect(host='xx.xx.xx.xx',user='USERNAME',passwd='PASSWORD',db='DBNAME',port=3306)

        cur=conn.cursor()

        cur.execute('select mac from servers where mac=%s',mac)

        data = cur.fetchone()
        if data is None:

            value = [name, brand, model, memory_gb, storage_gb, cpu_num, mac, datetime.now(), datetime.now()]

            cur.execute("insert into servers(name, brand, model, memory_gb, storage_gb, cpu_num, mac,  created_at, updated_at) values(%s, %s, %s, %s, %s, %s, %s, %s, %s)",value)            

        else:

            value1 = [name, brand, model, memory_gb, storage_gb, cpu_num, datetime.now(), mac]

            cur.execute("update servers set name=%s,brand=%s,model=%s,memory_gb=%s,storage_gb=%s,cpu_num=%s, updated_at=%s where mac=%s",value1)

           

        conn.commit()

        cur.close()

        conn.close()

        

    except MySQLdb.Error,e:

        print "Mysql Error %d: %s" % (e.args[0], e.args[1])

    

def perform(inc):

    s.enter(inc,0,perform,(inc,))

    event_func()

    

def mymain(inc=10):

    s.enter(0,0,perform,(inc,))

    s.run()

 

if __name__ == "__main__":

    mymain()

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
Python中生成器和yield语句的用法详解
Apr 17 Python
python得到qq句柄,并显示在前台的方法
Oct 14 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
Jul 04 Python
python os.path.isfile()因参数问题判断错误的解决
Nov 29 Python
关于pytorch中全连接神经网络搭建两种模式详解
Jan 14 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
Feb 21 Python
Python参数传递对象的引用原理解析
May 22 Python
matplotlib图例legend语法及设置的方法
Jul 28 Python
Python函数__new__及__init__作用及区别解析
Aug 31 Python
Pycharm安装第三方库失败解决方案
Nov 17 Python
Python3+SQLAlchemy+Sqlite3实现ORM教程
Feb 16 Python
Python中文分词库jieba(结巴分词)详细使用介绍
Apr 07 Python
简单的抓取淘宝图片的Python爬虫
Dec 25 #Python
简单使用Python自动生成文章
Dec 25 #Python
Python 抓取动态网页内容方案详解
Dec 25 #Python
利用Psyco提升Python运行速度
Dec 24 #Python
Python解决鸡兔同笼问题的方法
Dec 20 #Python
Python列表计数及插入实例
Dec 17 #Python
Python二维码生成库qrcode安装和使用示例
Dec 16 #Python
You might like
海贼王动画变成“真人”后,凯多神还原,雷利太帅了!
2020/04/09 日漫
(PHP实现)只使用++运算实现加法,减法,乘法,除法
2013/06/27 PHP
jQuery 剧场版 你必须知道的javascript
2009/05/27 Javascript
JavaScript作用域与作用域链深入解析
2013/12/06 Javascript
简单选项卡 js和jquery制作方法分享
2014/02/26 Javascript
浅析JavaScript动画
2015/06/10 Javascript
JQuery菜单效果的两个实例讲解(3)
2015/09/17 Javascript
第五篇Bootstrap 排版
2016/06/21 Javascript
js数字舍入误差以及解决方法(必看篇)
2017/02/28 Javascript
详解使用fetch发送post请求时的参数处理
2017/04/05 Javascript
从零开始学习Node.js系列教程四:多页面实现数学运算的client端和server端示例
2017/04/13 Javascript
4 种滚动吸顶实现方式的比较
2019/04/09 Javascript
jQuery操作元素的内容和样式完整实例分析
2020/01/10 jQuery
如何基于viewport vm适配移动端页面
2020/11/13 Javascript
python下载文件记录黑名单的实现代码
2017/10/24 Python
python分批定量读取文件内容,输出到不同文件中的方法
2018/12/08 Python
Python解析、提取url关键字的实例详解
2018/12/17 Python
python elasticsearch从创建索引到写入数据的全过程
2019/08/04 Python
对pytorch中的梯度更新方法详解
2019/08/20 Python
django rest framework serializers序列化实例
2020/05/13 Python
django orm模块中的 is_delete用法
2020/05/20 Python
python实现学生信息管理系统(精简版)
2020/11/27 Python
使用Python爬取小姐姐图片(beautifulsoup法)
2021/02/11 Python
HTML5拖拉上传文件的简单实例
2017/01/11 HTML / CSS
Pretty You London官网:英国拖鞋和睡衣品牌
2019/05/08 全球购物
Foot Locker澳洲官网:美国运动服和鞋类零售商
2019/10/11 全球购物
智能家居、吸尘器、滑板车、电动自行车网上购物:Geekmaxi
2021/01/18 全球购物
辩论赛主持词
2014/03/18 职场文书
文体活动实施方案
2014/03/27 职场文书
植树节标语
2014/06/27 职场文书
幼儿园大班区域活动总结
2014/07/09 职场文书
标准离婚协议书范文下载
2014/11/30 职场文书
大学生考试作弊被抓检讨书
2014/12/27 职场文书
文员岗位职责范本
2015/04/16 职场文书
2015年英语教学工作总结
2015/05/25 职场文书
爱国影片观后感
2015/06/18 职场文书