博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
我的第一个python程序
阅读量:5876 次
发布时间:2019-06-19

本文共 4609 字,大约阅读时间需要 15 分钟。

断断续续自学python已经几个月了,但是没啥实质性的进展,特别是不常用,加上到面向对象之后,人都是晕晕的,这不是被迫要写一个案例嘛!实现将产生的数据插入到execl中去,但是是追加的方式,而不是覆盖,然后算出平均值和插入图表,最开始之前参考别人写的文章用xlsxwriter模块,但是后来发现这个只能一次性写入,数据会覆盖,所以弃之,用了xlrd和xlwt模块。虽然暂时只实现了数据能追加写到execl中。
需求:一般我们选一个IDC机房,大多数的办法是用ping的方式去测试,但是这只能从icmp得出结果,我们试想一下除了icmp是不是还可以从tcp获取结果呢?主要是探测web服务质量,用cron每小时去执行一次python脚本,然后将产生的数据按系统当前时间插入到execl表中去分析结果。相当于做一个网络方面的测试。下面是一段代码主要是参考某人的书籍中。
#!/usr/bin/python
#coding=utf-8
import os,sys
import time
import pycurl
import xlrd
import xlwt
import xlutils
from xlrd import open_workbook
from xlutils.copy import copy
URL="http://www.baidu.com"
now = time.strftime('%H%M%S')
n = int(now[:2])
c = pycurl.Curl()
c.setopt(pycurl.URL, URL)
c.setopt(pycurl.CONNECTTIMEOUT, 5)
c.setopt(pycurl.TIMEOUT, 5)
c.setopt(pycurl.NOPROGRESS, 1)
c.setopt(pycurl.FORBID_REUSE, 1)
c.setopt(pycurl.MAXREDIRS, 1)
c.setopt(pycurl.DNS_CACHE_TIMEOUT, 30)
indexfile = open(os.path.dirname(os.path.realpath(__file__))+"/content.txt","wb")
c.setopt(pycurl.WRITEHEADER, indexfile)
c.setopt(pycurl.WRITEDATA, indexfile)
try:
    c.perform()
except Exception,e:
    print "connection error:"+str(e)
    indexfile.close()
    c.close()
    sys.exit()
NAMELOOKUP_TIME = c.getinfo(c.NAMELOOKUP_TIME)
CONNECT_TIME = c.getinfo(c.CONNECT_TIME)
TOTAL_TIME = c.getinfo(c.TOTAL_TIME)
HTTP_CODE = c.getinfo(c.HTTP_CODE)
SIZE_DOWNLOAD = c.getinfo(c.SIZE_DOWNLOAD)
HEADER_SIZE = c.getinfo(c.HEADER_SIZE)
SPEED_DOWNLOAD=c.getinfo(c.SPEED_DOWNLOAD)
print "HTTP状态码: %s" %(HTTP_CODE)
print "DNS解析时间: %.2f ms" %(NAMELOOKUP_TIME*1000)
print "建立连接时间: %.2f ms" %(CONNECT_TIME*1000)
print "传输结束总时间: %.2f ms" %(TOTAL_TIME*1000)
print "下载数据包大小: %d bytes/s" %(SIZE_DOWNLOAD)
print "HTTP头部大小: %d byte" %(HEADER_SIZE)
print "平均下载速度: %d bytes/s" %(SPEED_DOWNLOAD)
indexfile.close()
c.close()
下面开始是我自己写的代码,可优化空间太大,作为一个初学者来说。请大家勿吐槽啊!
N = (0,1,2,3,4,5,6,7)
L = (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25)
H = (00,01,02,03,04,05,06,07,'08','09',10,11,12,13,14,15,16,17,18,19,20,21,22,23)
if not os.path.exists('chart.xlsx'):
    w = xlwt.Workbook()
    sheet = w.add_sheet('chart.xlsx')
    w.save('chart.xlsx')
    rb = open_workbook('chart.xlsx')
    wb = copy(rb)
    sheet = wb.get_sheet(0)
    sheet.write(N[0], L[0], URL)
    sheet.write(N[0], L[1], H[0])
    sheet.write(N[0], L[2], H[1])
    sheet.write(N[0], L[3], H[2])
    sheet.write(N[0], L[4], H[3])
    sheet.write(N[0], L[5], H[4])
    sheet.write(N[0], L[6], H[5])
    sheet.write(N[0], L[7], H[6])
    sheet.write(N[0], L[8], H[7])
    sheet.write(N[0], L[9], H[8])
    sheet.write(N[0], L[10], H[9])
    sheet.write(N[0], L[11], H[10])
    sheet.write(N[0], L[12], H[11])
    sheet.write(N[0], L[13], H[12])
    sheet.write(N[0], L[14], H[13])
    sheet.write(N[0], L[15], H[14])
    sheet.write(N[0], L[16], H[15])
    sheet.write(N[0], L[17], H[16])
    sheet.write(N[0], L[18], H[17])
    sheet.write(N[0], L[19], H[18])
    sheet.write(N[0], L[20], H[19])
    sheet.write(N[0], L[21], H[20])
    sheet.write(N[0], L[22], H[21])
    sheet.write(N[0], L[23], H[22])
    sheet.write(N[0], L[24], H[23])
    sheet.write(N[0], L[25], u'平均值')
    sheet.write(N[1], L[0], u'HTTP状态码')
    sheet.write(N[2], L[0], u'DNS解析时间')
    sheet.write(N[3], L[0], u'建立连接时间')
    sheet.write(N[4], L[0], u'传输结束总时间')
    sheet.write(N[5], L[0], u'下载数据包大小')
    sheet.write(N[6], L[0], u'HTTP头部大小')
    sheet.write(N[7], L[0], u'平均下载速度')
    wb.save('chart.xlsx')
if n == 0:
    rb = open_workbook('chart.xlsx')
    wb = copy(rb)
    sheet = wb.get_sheet(0)
    sheet.write(N[1], L[1], HTTP_CODE)
    sheet.write(N[2], L[1], NAMELOOKUP_TIME*1000)
    sheet.write(N[3], L[1], CONNECT_TIME*1000)
    sheet.write(N[4], L[1], TOTAL_TIME*1000)
    sheet.write(N[5], L[1], SIZE_DOWNLOAD)
    sheet.write(N[6], L[1], HEADER_SIZE)
    sheet.write(N[7], L[1], SPEED_DOWNLOAD)
    wb.save('chart.xlsx')
elif n == 1:
    rb = open_workbook('chart.xlsx')
    wb = copy(rb)
    sheet = wb.get_sheet(0)
    sheet.write(N[1], L[2], HTTP_CODE)
    sheet.write(N[2], L[2], NAMELOOKUP_TIME*1000)
    sheet.write(N[3], L[2], CONNECT_TIME*1000)
    sheet.write(N[4], L[2], TOTAL_TIME*1000)
    sheet.write(N[5], L[2], SIZE_DOWNLOAD)
    sheet.write(N[6], L[2], HEADER_SIZE)
    sheet.write(N[7], L[2], SPEED_DOWNLOAD)
    wb.save('chart.xlsx')
......此刻省去了很多行,因为都是一样,只需要将==递增就行,然后L[X]中的值也是递增。
elif n == 23:
    rb = open_workbook('chart.xlsx')
    wb = copy(rb)
    sheet = wb.get_sheet(0)
    sheet.write(N[1], L[24], HTTP_CODE)
    sheet.write(N[2], L[24], NAMELOOKUP_TIME*1000)
    sheet.write(N[3], L[24], CONNECT_TIME*1000)
    sheet.write(N[4], L[24], TOTAL_TIME*1000)
    sheet.write(N[5], L[24], SIZE_DOWNLOAD)
    sheet.write(N[6], L[24], HEADER_SIZE)
    sheet.write(N[7], L[24], SPEED_DOWNLOAD)
    wb.save('chart.xlsx')
else:
    print '数据插入错误!'
最后我们用crontab每整点运行一次脚本。就可以看到数据啦!
下面大家看一下效果图啊!
需要改进的地方:
1、产生的excel文件肯定需要加上每天日期命名,并且是每天创建一个。
2、这个模块不知道如何求平均值。
3、不会插入图表。
这些问题争取在下一篇博客中解决哈!

转载地址:http://vmkix.baihongyu.com/

你可能感兴趣的文章
hdu5373
查看>>
4.单链表的创建和建立
查看>>
testng生成报告 testng-xslt 美化测试报告
查看>>
Android 好看的搜索界面,大赞Animation
查看>>
查询反模式 - GroupBy、HAVING的理解
查看>>
[转]动态加载javascript
查看>>
【协议】5、gossip 协议
查看>>
基于配置文件的redis的主从复制
查看>>
hasura graphql 角色访问控制
查看>>
springmvc中controller内方法跳转forward?redirect?
查看>>
C#委托,事件理解入门 (译稿)转载
查看>>
容器的end()方法
查看>>
[转] Agile Software Development 敏捷软件开发
查看>>
HDU 1007 Quoit Design (最小点对,模板题)
查看>>
Windows Phone 7 自定义事件
查看>>
Objective-c 网址中带中文解决方法
查看>>
向函数传递数组的问题
查看>>
上班族的坐姿
查看>>
ubuntu 12.04 下面安装vmware workstation 8.0.4
查看>>
[原创]FineUI秘密花园(二十三) — 树控件概述
查看>>