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 相关文章推荐
win7 下搭建sublime的python开发环境的配置方法
Jun 18 Python
Python中的推导式使用详解
Jun 03 Python
Python中扩展包的安装方法详解
Jun 14 Python
Django视图之ORM数据库查询操作API的实例
Oct 27 Python
在python中将list分段并保存为array类型的方法
Jul 15 Python
python基于socket进行端口转发实现后门隐藏的示例
Jul 25 Python
Python Django框架防御CSRF攻击的方法分析
Oct 18 Python
Python List列表对象内置方法实例详解
Oct 22 Python
python中的数组赋值与拷贝的区别详解
Nov 26 Python
Pycharm 2020年最新激活码(亲测有效)
Sep 18 Python
python 工具 字符串转numpy浮点数组的实现
Mar 14 Python
matplotlib quiver箭图绘制案例
Apr 17 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
ASP和PHP都是可以删除自身的
2007/04/09 PHP
php实现httpRequest的方法
2015/03/13 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
2016/03/25 PHP
thinkPHP5 tablib标签库自定义方法详解
2017/05/10 PHP
Linux下 php7安装redis的方法
2018/11/01 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
$.ajax json数据传递方法
2008/11/19 Javascript
jquery图片上下tab切换效果
2011/03/18 Javascript
css值转换成数值请抛弃parseInt
2011/10/24 Javascript
js实现快速分享功能(你的文章分享工具)
2013/06/25 Javascript
javascript 实现子父窗体互相传值的简单实例
2014/02/17 Javascript
js实现二代身份证号码验证详解
2014/11/20 Javascript
静态页面html中跳转传值的JS处理技巧
2016/06/22 Javascript
jQuery实现日期联动效果实例
2016/07/26 Javascript
jquery属性,遍历,HTML操作方法详解
2016/09/17 Javascript
javascript学习笔记_浅谈基础语法,类型,变量
2016/09/19 Javascript
Javascript中引用类型传递的知识点小结
2017/03/06 Javascript
uploader秒传图片到服务器完整代码
2017/04/22 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
es6函数之rest参数用法实例分析
2020/04/18 Javascript
python基于windows平台锁定键盘输入的方法
2015/03/05 Python
对于Python的Django框架使用的一些实用建议
2015/04/03 Python
python中引用与复制用法实例分析
2015/06/04 Python
对Python 文件夹遍历和文件查找的实例讲解
2018/04/26 Python
python实现C4.5决策树算法
2018/08/29 Python
django创建简单的页面响应实例教程
2019/09/06 Python
Pytorch之contiguous的用法
2019/12/31 Python
巴西网上药房:onofre
2016/11/21 全球购物
意大利香水和彩妆护肤品购物网站:Ditano
2017/08/13 全球购物
美津浓美国官网:Mizuno美国
2018/08/07 全球购物
丹麦优惠购物网站:PLUSSHOP
2019/03/24 全球购物
试用期员工考核制度
2014/01/22 职场文书
青年教师师德演讲稿
2014/08/26 职场文书
2014财务人员自我评价范文
2014/09/21 职场文书
python字典的元素访问实例详解
2021/07/21 Python
python工具dtreeviz决策树可视化和模型可解释性
2022/03/03 Python