python从oracel中提取ip信息并批量ping后保存

目的:

    从oracle中提取ip信息,通过调用os实现ping测。生成结果后保存,直接上代码。

#!/usr/bin/python
#coding=utf-8

import os
import cx_Oracle 
import xlwt
import datetime

he=datetime.datetime.now().strftime('%m-%d-%H')#输出特定格式的时间,命名文件命名时需要用到


#定义oracle数据库ip、用户名密码、sql语句
conn = cx_Oracle.connect('gzhxx/[email protected]/oss')    
cursor = conn.cursor ()#连接数据库
printHeader = True
sql = "select IPNO_BTS_ID AS ID,ipno_mpia_8 AS ip from c_lte_ipno WHERE CONF_ID=1"
cursor.execute (sql)#执行sql
rows = cursor.fetchall()#获取sql执行的结果



f = xlwt.Workbook() #创建工作簿
sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True) #创建sheet


#定义表头格式	 
biaotou = ['站号','ip','是否断站']
k=0
for k in range(3):
    sheet1.write(0,k,biaotou[k])
    k+1


#定义ping
def ping(ip):
    
    jieguo=os.popen('ping -n 1 -w 1 %s'%ip)
    t=jieguo.read()
    k = '100%' in t
    if k:    
        fanhui = u'断站'
    else:
        fanhui = u'正常'	    
    return fanhui
#定义ping结束

  
i=0
#把sql取的数据存到excel中
for i in range(len(rows)):#表格的第一行开始写数据
    p=i+1
    k=0#每进行一次for循环就重置一次k值,确保数据写入时(如果这列有数据的话)总是从第一列开始
    if type(rows[i])==tuple:
        for k in range(len(rows[i])):
            sheet1.write(p,k,rows[i][k])#表格的第一列开始写数据,第一列,第二例。。。。(如果改行只有一个单元格的数据,将不会触发该动作)
            if k==1:#k==1的时候说明这里的内容是ip,可以ping
                ip=rows[i][k]
                ping(ip)#调用ping函数、返回ping的结果
                k=k+1#k+1目的是把ping的结果写在第k+1列
                sheet1.write(p,k,ping(ip))#把ping的结果写在同一行的后一列
                
            else:#如果k不等于一、不触发ping操作
                k+1
            
        
    else:#这里其实不用写,经过查看,所提取的数据即便是一个元素,也是list类型的tuple组合。
        sheet1.write(p,k,rows[i])#表格的第一行开始写。第一行,第二行。。。。
        i+1
		


	
f.save('D:\kpi\%s.xls' % (he))#保存文件,这里就用了上文生成的时间变量作为文件名




你可能感兴趣的:(python)