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使用MONGODB入门实例
May 11 Python
谈谈Python进行验证码识别的一些想法
Jan 25 Python
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
Jun 13 Python
Python selenium 三种等待方式解读
Sep 15 Python
python使用socket实现的传输demo示例【基于TCP协议】
Sep 24 Python
Python通过递归获取目录下指定文件代码实例
Nov 07 Python
PyCharm使用之配置SSH Interpreter的方法步骤
Dec 26 Python
Python 日期的转换及计算的具体使用详解
Jan 16 Python
python GUI库图形界面开发之PyQt5开发环境配置与基础使用
Feb 25 Python
Python如何使用turtle库绘制图形
Feb 26 Python
在Tensorflow中实现leakyRelu操作详解(高效)
Jun 30 Python
python实现对doc、txt、xls等文档的读写操作
Apr 02 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 在文件指定行插入数据的代码
2010/05/08 PHP
PHP 字符串正则替换函数preg_replace使用说明
2011/07/15 PHP
PHP实现抓取迅雷VIP账号的方法
2015/07/30 PHP
在Mac OS上搭建PHP的Yii框架及相关测试环境
2016/02/14 PHP
HTML 自动伸缩的表格Table js实现
2009/04/01 Javascript
详解JavaScript基本类型和引用类型
2015/12/09 Javascript
angular中的http拦截器Interceptors的实现
2017/02/21 Javascript
Bootstrap标签页(Tab)插件使用方法
2017/03/21 Javascript
关于JavaScript语句后面的分号问题
2017/12/07 Javascript
vue-router 前端路由之路由传值的方式详解
2019/04/30 Javascript
浅谈javascript错误处理
2019/08/11 Javascript
vue移动端下拉刷新和上滑加载
2020/10/27 Javascript
vue封装自定义指令之动态显示title操作(溢出显示,不溢出不显示)
2020/11/12 Javascript
[37:03]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第二场 12.16
2020/12/18 DOTA
python list使用示例 list中找连续的数字
2014/01/27 Python
Python命令行参数解析模块optparse使用实例
2015/04/13 Python
Python中字符串的修改及传参详解
2016/11/30 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/26 Python
Pycharm取消py脚本中SQL识别的方法
2018/11/29 Python
python打开使用的方法
2019/09/30 Python
python操作gitlab API过程解析
2019/12/27 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
2020/01/12 Python
python3 使用traceback定位异常实例
2020/03/09 Python
python实现飞船游戏的纵向移动
2020/04/24 Python
实现ECharts双Y轴左右刻度线一致的例子
2020/05/16 Python
python 实现客户端与服务端的通信
2020/12/23 Python
马耳他航空公司官方网站:Air Malta
2019/05/15 全球购物
中学生班主任评语
2014/01/30 职场文书
农贸市场管理制度
2014/01/31 职场文书
《黄河颂》教学反思
2014/02/07 职场文书
国际经济与贸易专业大学生职业规划书
2014/03/01 职场文书
教室标语大全
2014/06/21 职场文书
护士辞职信怎么写
2015/02/27 职场文书
入党积极分子群众意见
2015/06/01 职场文书
《牧场之国》教学反思
2016/02/22 职场文书
22句经典语录:送给优柔寡断和胡思乱想的朋友们
2019/12/13 职场文书