输入这是我的第一个python程序_我的第一个python程序

展开阅读全文

断断续续自学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每整点运行一次脚本。就可以看到数据啦!

下面大家看一下效果图啊!

LwAAAABJRU5ErkJggg==

需要改进的地方:

1、产生的excel文件肯定需要加上每天日期命名,并且是每天创建一个。

2、这个模块不知道如何求平均值。

3、不会插入图表。

这些问题争取在下一篇博客中解决哈!

本文首发在云栖社区,遵循云栖社区版权声明:本文内容由互联网用户自发贡献,版权归用户作者所有,云栖社区不为本文内容承担相关法律责任。云栖社区已在2020年6月升级到阿里云开发者社区。如果您发现有涉嫌抄袭的内容,请填写侵权投诉表单进行举报,一经查实,阿里云开发者社区将协助删除涉嫌侵权内容。

网友评论

登录后评论

0/500

评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值