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 相关文章推荐
在Django的URLconf中使用多个视图前缀的方法
Jul 18 Python
python 计算两个日期相差多少个月实例代码
May 24 Python
Python中str.join()简单用法示例
Mar 20 Python
python中返回矩阵的行列方法
Apr 04 Python
python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
Jul 20 Python
django 外键model的互相读取方法
Dec 15 Python
Python操作qml对象过程详解
Sep 26 Python
python requests模拟登陆github的实现方法
Dec 26 Python
在python3中实现更新界面
Feb 21 Python
什么是Python中的顺序表
Jun 02 Python
python使用smtplib模块发送邮件
Dec 17 Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
Jan 28 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比较多维数组中值的大小排序实现代码
2012/09/08 PHP
PHP redis实现超迷你全文检索
2017/03/04 PHP
PHP设计模式(四)原型模式Prototype实例详解【创建型】
2020/05/02 PHP
jQuery使用手册之三 CSS操作
2007/03/24 Javascript
jQuery 获取对象 根据属性、内容匹配, 还有表单元素匹配
2010/05/31 Javascript
基于jQuery的合并表格中相同文本的相邻单元格的代码
2011/04/06 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
2013/11/30 Javascript
基于javascript实现判断移动终端浏览器版本信息
2014/12/09 Javascript
JQuery之proxy实现绑定代理方法
2016/08/01 Javascript
JS命令模式例子之菜单程序
2016/10/10 Javascript
详解js产生对象的3种基本方式(工厂模式,构造函数模式,原型模式)
2017/01/09 Javascript
jQuery基本选择器和层次选择器学习使用
2017/02/27 Javascript
nodejs socket实现的服务端和客户端功能示例
2017/06/02 NodeJs
JavaScript该如何学习 怎样轻松学习JavaScript
2017/06/12 Javascript
JavaScript数组_动力节点Java学院整理
2017/06/26 Javascript
node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能
2018/01/12 Javascript
深入理解JavaScript和TypeScript中的class
2018/04/22 Javascript
深入浅出理解JavaScript闭包的功能与用法
2018/08/01 Javascript
微信小程序 拍照或从相册选取图片上传代码实例
2019/08/28 Javascript
解决在Vue中使用axios用form表单出现的问题
2019/10/30 Javascript
详解Node.JS模块 process
2020/08/31 Javascript
[01:02:07]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Cpy和Python的效率对比
2015/03/20 Python
Python实现数据库并行读取和写入实例
2017/06/09 Python
Django文件存储 默认存储系统解析
2019/08/02 Python
HTML5新增加标签和功能概述
2016/09/05 HTML / CSS
AmazeUI导航的示例代码
2020/08/14 HTML / CSS
澳大利亚首个在线预订旅游网站:Wotif
2017/07/19 全球购物
MediaMarkt比利时:欧洲最大电器连锁店
2020/12/21 全球购物
奠基仪式策划方案
2014/05/15 职场文书
2014年置业顾问工作总结
2014/11/17 职场文书
预备党员半年考察意见
2015/06/01 职场文书
超级实用!五步法则,教你写好年终工作总结
2019/12/05 职场文书
解决Golang中ResponseWriter的一个坑
2021/04/27 Golang
python数据可视化使用pyfinance分析证券收益示例详解
2021/11/20 Python
Java Lambda表达式常用的函数式接口
2022/04/07 Java/Android