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

来源:互联网 发布:淘宝返利api接口源码 编辑:程序博客网 时间:2024/05/02 02:56

目的:

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

#!/usr/bin/python#coding=utf-8import osimport cx_Oracle import xlwtimport datetimehe=datetime.datetime.now().strftime('%m-%d-%H')#输出特定格式的时间,命名文件命名时需要用到#定义oracle数据库ip、用户名密码、sql语句conn = cx_Oracle.connect('gzhxx/GZhxx@100.66.94.150/oss')    cursor = conn.cursor ()#连接数据库printHeader = Truesql = "select IPNO_BTS_ID AS ID,ipno_mpia_8 AS ip from c_lte_ipno WHERE CONF_ID=1"cursor.execute (sql)#执行sqlrows = cursor.fetchall()#获取sql执行的结果f = xlwt.Workbook() #创建工作簿sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True) #创建sheet#定义表头格式 biaotou = ['站号','ip','是否断站']k=0for k in range(3):    sheet1.write(0,k,biaotou[k])    k+1#定义pingdef 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+1f.save('D:\kpi\%s.xls' % (he))#保存文件,这里就用了上文生成的时间变量作为文件名




1 0
原创粉丝点击