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

本文实例讲述了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程序设计有所帮助。

(0)

相关推荐

  • Python获取电脑硬件信息及状态的实现方法

    本文以实例形式展示了Python获取电脑硬件信息及状态的实现方法,是Python程序设计中很有实用价值的技巧.分享给大家供大家参考之用.具体方法如下: 主要功能代码如下: #!/usr/bin/env python # encoding: utf-8 from optparse import OptionParser import os import re import json def main(): try: parser = OptionParser(usage="%prog [optio

  • Linux 发邮件磁盘空间监控(python)

    核心代码: #!/usr/bin/python # -*- coding: UTF-8 -*- import smtplib import os import commands,time from email.mime.text import MIMEText #from email import MIMEText disk_free=os.popen('df -lh') list_disk=disk_free.read() mailto_list=["2880329185@qq.com&quo

  • Python实现获取磁盘剩余空间的2种方法

    本文实例讲述了Python实现获取磁盘剩余空间的2种方法.分享给大家供大家参考,具体如下: 方法1: import ctypes import os import platform import sys def get_free_space_mb(folder): """ Return folder/drive free space (in bytes) """ if platform.system() == 'Windows': free_by

  • python在Windows8下获取本机ip地址的方法

    本文实例讲述了python在Windows8下获取本机ip地址的方法.分享给大家供大家参考.具体实现方法如下: import socket hostname = socket.gethostname() IPinfo = socket.gethostbyname_ex(hostname) LocalIP = IPinfo[2][2] print LocalIP 希望本文所述对大家的Python程序设计有所帮助.

  • python获取各操作系统硬件信息的方法

    本文实例讲述了python获取各操作系统硬件信息的方法.分享给大家供大家参考.具体如下: 1. windows 使用WMI: (WMI官网地址:http://pypi.python.org/pypi/WMI 或 点击此处本站下载.) import wmi w=wmi.WMI() cpus=w.Win32_Processor() for u in cpus: print 'cpu id:',u.ProcessorId 运行结果如下: cpu id: BFEBFBFF0001067A cpu id:

  • python如何获取服务器硬件信息

    本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 #!/usr/bin/env python # -*- coding: utf-8 -*- import rlcompleter, readline readline.parse_and_bind('tab: complete') import dmidecode import time import os import re system=dmidecode.system() print "\033[1;36

  • Python实现测试磁盘性能的方法

    本文实例讲述了Python实现测试磁盘性能的方法.分享给大家供大家参考.具体如下: 该代码做了如下工作: create 300000 files (512B to 1536B) with data from /dev/urandom rewrite 30000 random files and change the size read 30000 sequential files read 30000 random files delete all files sync and drop cac

  • python获取本机mac地址和ip地址的方法

    本文实例讲述了python获取本机mac地址和ip地址的方法.分享给大家供大家参考.具体如下: import sys, socket def getipaddrs(hostname): result = socket.getaddrinfo(hostname,None,0,socket.SOCK_STREAM) return [x[4][0] for x in result] # the name of the local machine hostname = socket.gethostnam

  • python 获取本机ip地址的两个方法

    第一种: 复制代码 代码如下: import socket import fcntl import struct def get_ip_address(ifname): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) return socket.inet_ntoa(fcntl.ioctl( s.fileno(), 0x8915, # SIOCGIFADDR struct.pack('256s', ifname[:15]) )[20:24]

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

    本文实例讲述了python执行shell获取硬件参数写入mysql的方法.分享给大家供大家参考.具体分析如下: 最近要获取服务器各种参数,包括cpu.内存.磁盘.型号等信息.试用了Hyperic HQ.Nagios和Snmp,它们功能都挺强大的,但是于需求不是太符,亦或者太heavy. 于是乎想到用python执行shell获取这些信息,python执行shell脚本有以下三种方法: 1. os.system() 复制代码 代码如下: os.system('ls') #返回结果0或者1,不能得到

  • python 执行文件时额外参数获取的实例

    如下所示: def usage(): print(' * usage:') print(' * -c [val] : exporter_conf filepath, default importer_conf.') print(' * -h : print this.') print(' * -z : 不需要确认参数,直接执行') do_not_confirm = False conf = '' #c: [c+冒号表示-c 后面有参数,hz表示-h,-z后面没参数,如果此时在-h 100加上参数

  • 解决python 执行shell命令无法获取返回值的问题

    问题背景:利用python获取服务器中supervisor状态信息时发现未能获取到返回值. python获取执行shell命令后返回值得几种方式: # 1.os模块 ret = os.popen("supervisorctl status") ret_data = ret.read() # 2.subprocess模块 ret = subprocess.Popen('supervisorctl status',shell=True,stdout=subprocess.PIPE) out

  • 详解python执行shell脚本创建用户及相关操作

    用户发送请求,返回帐号和密码 ###利用框架flask 整体思路: # 目的:实现简单的登录的逻辑 # 1需要get和post请求方式 需要判断请求方式 # 2获取参数 # 3执行shell # 4如果判断都没问题,就返回结果 导包 ... 给模版传递消息 用flash --需要对内容加密,因此需要设置 secret_key , 做加密消息的混淆 app = Flask(__name__) app.secret_key = 'kingdomai' 使用wtf实现表单,需要自定义一个表单类 #va

  • 使用python执行shell脚本 并动态传参 及subprocess的使用详解

    最近工作需求中 有遇到这个情况 在web端获取配置文件内容 及 往shell 脚本中动态传入参数 执行shell脚本这个有多种方法 最后还是选择了subprocess这个python标准库 subprocess这个模块可以非常方便的启动一个子进程,并且控制其输入和输出 Class Popen(args,bufsize = 0,executable=None, stdin =None,stdout =None,stderr =None, preexec_fn = None,close_fds =

  • python 执行shell命令并将结果保存的实例

    方法1: 将shell执行的结果保存到字符串 def run_cmd(cmd): result_str='' process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) result_f = process.stdout error_f = process.stderr errors = error_f.read() if errors: pass result_str =

  • Python 运行 shell 获取输出结果的实例

    首先使用内置模块os. >>> import os >>> code = os.system("pwd && sleep 2") # /User/zhipeng >>> print code # 0 问题是 os.system 只能获取到结束状态 使用内置模块 subprocess >>> import subprocess >>> subprocess.Popen("p

  • C# 获取硬件参数的实现方法

    C# 获取硬件参数的实现方法 示例代码: private static string GetIdentifier(string wmiClass, string wmiProperty, string wmiMustBeTrue) { string result = ""; System.Management.ManagementClass mc = new System.Management.ManagementClass(wmiClass); System.Management.M

  • python和shell获取文本内容的方法

    这两天搞脚本,花费不少时间. Python和Shell都可以获取文本内容,网上许多资料介绍的都不具体.简单的使用Python和Shell写了脚本. 做一些笔记沉淀一下. 1.Python实现: #-*- encoding:UTF-8 -*- filehandler = open('f.txt','r') #以读方式打开文件,rb为二进制方式(如图片或可执行文件等) print filehandler.read() #读取整个文件 filehandler.close() #关闭文件句柄 2.She

  • Python 读取千万级数据自动写入 MySQL 数据库

    目录 前言 场景一:数据不需要频繁的写入mysql 场景二:数据是增量的,需要自动化并频繁写入mysql 总结 前言 Python 读取数据自动写入 MySQL 数据库,这个需求在工作中是非常普遍的,主要涉及到 python 操作数据库,读写更新等,数据库可能是 mongodb. es,他们的处理思路都是相似的,只需要将操作数据库的语法更换即可.本篇文章会给大家系统的分享千万级数据如何写入到 mysql,分为两个场景,两种方式. 场景一:数据不需要频繁的写入mysql 使用 navicat 工具

随机推荐