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算法应用实战之栈详解
Feb 04 Python
virtualenv实现多个版本Python共存
Aug 21 Python
python实现ID3决策树算法
Dec 20 Python
Python将多个excel表格合并为一个表格
Feb 22 Python
Python实现Mysql数据统计及numpy统计函数
Jul 15 Python
Django时区详解
Jul 24 Python
利用pandas合并多个excel的方法示例
Oct 10 Python
Python3.8对可迭代解包的改进及用法详解
Oct 15 Python
Flask框架路由和视图用法实例分析
Nov 07 Python
python 有效的括号的实现代码示例
Nov 11 Python
利用Python实现学生信息管理系统的完整实例
Dec 30 Python
Pycharm 如何一键加引号的方法步骤
Feb 05 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
php全局变量和类配合使用深刻理解
2013/06/05 PHP
php中filter函数验证、过滤用户输入的数据
2014/01/13 PHP
解决php的“It is not safe to rely on the system’s timezone settings”问题
2015/10/08 PHP
PHP利用imagick生成组合缩略图
2016/02/19 PHP
PHP实现负载均衡session共享redis缓存操作示例
2018/08/22 PHP
jquery通过a标签删除table中的一行的代码
2013/12/02 Javascript
javascript获取form里的表单元素的示例代码
2014/02/14 Javascript
jquery网页回到顶部效果(图标渐隐,自写)
2014/06/16 Javascript
JS循环遍历JSON数据的方法
2014/07/08 Javascript
jquery实现select选择框内容左右移动代码分享
2015/11/21 Javascript
学习JavaScript设计模式(封装)
2015/11/26 Javascript
CSS或者JS实现鼠标悬停显示另一元素
2016/01/22 Javascript
谈一谈js中的执行环境及作用域
2016/03/30 Javascript
基于原生js淡入淡出函数封装(兼容IE)
2016/10/20 Javascript
基于JavaScript实现下拉列表左右移动代码
2017/02/07 Javascript
angularJs中datatable实现代码
2017/06/03 Javascript
Angularjs上传文件组件flowjs功能
2017/08/07 Javascript
详解vue-cli脚手架中webpack配置方法
2018/08/22 Javascript
Node.js中读取TXT文件内容fs.readFile()用法
2018/10/10 Javascript
[01:02]2014 DOTA2国际邀请赛中国区预选赛 现场抢先看
2014/05/22 DOTA
[55:03]LGD vs EG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
使用Python抓取模板之家的CSS模板
2015/03/16 Python
Python多线程编程(五):死锁的形成
2015/04/05 Python
合并百度影音的离线数据( with python 2.3)
2015/08/04 Python
Python除法之传统除法、Floor除法及真除法实例详解
2019/05/23 Python
python实现在函数中修改变量值的方法
2019/07/16 Python
Python实现计算长方形面积(带参数函数demo)
2020/01/18 Python
Python写出新冠状病毒确诊人数地图的方法
2020/02/12 Python
医学生实习自荐信
2013/10/01 职场文书
数学教学随笔感言
2014/02/17 职场文书
应届生求职信范文
2014/06/30 职场文书
关于随地扔垃圾的检讨书
2014/09/30 职场文书
质量保证书
2015/01/17 职场文书
房产遗嘱范本
2015/08/06 职场文书
入党申请书格式
2019/06/20 职场文书
Java比较两个对象中全部属性值是否相等的方法
2021/08/07 Java/Android