本帖最后由 ning_lianjie 于 2010-10-25 11:04 编辑
经过几天的测试,发现一些问题,做了些修改,现在贴出来,希望大家能够给些建议
1·为了让打印出来的日志,直接excel读取,改成csv格式,并且用“,”逗号分隔。
2·上一个脚本用字符串定位,比较笨拙,而且命令执行的结果,不一定是规则的模式,就会造成取到错误的值。
3·取值方式改成“正则表达式”,finditer函数。
#!/usr/bin/python
'''Synchronous script
About rsync-server'''
import os
import sys
import time
import re
now=time.strftime('%Y%m%d')
pwd='/tmp/.passwd'
log22='/tmp/stats_%s.csv' % (now)
dict_mon={
'mytest3':('ning@127.0.0.1::','/tmp/test2010'),
'mytest1':('ning@127.0.0.1::','/tmp/test2010'),
'mytest4':('ning@127.0.0.1::','/tmp/test2010'),
'mytest2':('ning@127.0.0.1::','/tmp/test2010')
}
def write_title(log_stat):
file_log=open(log_stat,'a')
file_log.write('time,module,Number of files,Number of files transferred,Total file size(bytes),Total transferred file size(bytes)\n')
file_log.close()
def write_notes(d_ary,log_stat,port=873):
for i in d_ary:
line_mon=d_arycmd='rsync -tzrp --stats --port=%s --password-file=%s %s%s %s' % (port,pwd,line_mon[0],i,line_mon[1])
fle=open(log_stat,'a')
now=time.strftime('%H:%M:%S')
try:
cmd_put=os.popen(cmd)
list_tmp=[]
re_p=re.compile('(Number of files:|Number of files transferred:|Total file size:|Total transferred file size:) (.)')
for each_line1 in cmd_put:
for each_line2 in re_p.finditer(each_line1):
# print each_line2.group()
if each_line2 is not None:
list_tmp.append(each_line2.group(2))
else:
pass
cmd_stat='%s,%s,%s,%s,%s,%s,%s' % (now,i,list_tmp[0],list_tmp[1],list_tmp[2],list_tmp[3],os.linesep)
cmd_put.close()
fle.write(cmd_stat)
except:
cmd_stat='%s,%s,%s,%s,%s,%s' % (now,i,'error','error','error','error'+os.linesep)
fle.write(cmd_stat)
fle.close()
if __name__ == '__main__':
write_title(log22)
write_notes(dict_mon,log22)
# write_notes(dict_mon,log22,8000)