目的:
从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))#保存文件,这里就用了上文生成的时间变量作为文件名