一 前言
这个脚本不够健壮,只是我个人使用,处理一些大数据的业务。分享给大家,不要乱玩,会玩坏的。。。大家看看思路就好了。
该脚本将输出今天的log文件内容。如果log文件是今日新建的,日志内容将会放在里面。如果不是,就会将存储位置下的.log文件打成 .tar.gz 包。同时以当日时间作为log文件的名称(前缀程序会给你补上),再放入log日志内容,最后存储在用户输入的路径下。
处理场景:每天某文件夹下有大量的log日志文件输出。该脚本可以在命令行调用,输出log日志,压缩log日志。
注意:某个位置下,必须有一个“前缀-xxxx-xx-xx.log”文件【前缀是指你输入的log文件的前缀,xxxx-xx-xx是指年月日】。否则,程序必然崩溃(我没有写判断)。
使用方法:(我的脚本是logPut.py文件)命令行输入: python logPut.py -d log日志的存储路径 -f log日志文件名的前缀 -c log日志的内容
二 代码
# -*- coding: utf-8 -*-
import sys
import getopt
import tarfile
import time
import re
import glob
import os
#帮助函数
def helping():
print sys.argv[0]+"-d 路径 -f 文件名前缀 -c log日志内容"
print sys.argv[0] +"-h 获取帮助文档"
#压缩log文件函数
def tar(fname):
t = tarfile.open(fname + ".tar.gz", "w:gz")
p,f=os.path.split(fname)
os.chdir(p)
t.add(f)
t.close()
print "脚本名:", sys.argv[0]
#for i in range(1, len(sys.argv)):
#print "参数", i, sys.argv[i]
#hd:f:c: ,表示命令的开头,h:帮助 ,d:log文件存储路径,f:log文件的前缀,c:log文件的内容
opts, args = getopt.getopt(sys.argv[1:], "hd:f:c:")
#获取的变量内容,定义
path=""
filePrefix=""
content=""
#循环对变量进行赋值
for op, value in opts:
if op == "-d":
path = value
elif op == "-f":
filePrefix = value
elif op == "-c":
content = value
elif op == "-h":
helping()
sys.exit()
#时间模块,用于给log文件添加时间
#设置时间格式
ISOTIMEFORMAT="%Y-%m-%d"
timeNow = time.strftime(ISOTIMEFORMAT, time.localtime())
#Mac下的路径:/Users/tanishindaira/Desktop,Windows平台下,路径是不同的
#通过字符串拼接,确定存储位置和文件名称
fileName = path+"/"+filePrefix+"-"+timeNow+".log"
#切割文件名,获取时间
filesNameSplit = path+r"/cms-*.log"
list = glob.glob(filesNameSplit)
cont=""
for i in list:
baseName = os.path.basename(i)
cont += os.path.basename(i)
cut = re.split(r'(\W+)',cont)
#print cut
timeOld = cut[2]+cut[4]+cut[6]
#print timeOld
#切割当前系统时间
cut1 = re.split(r'(\W+)',timeNow)
timeNowSplit = cut1[0]+cut1[2]+cut1[4]
#print timeNowSplit
#判断时间,相等则写在当前文件内,不相等则单独写在新的文件内
if timeOld == timeNowSplit:
#写在当前文件
f = file(fileName,"a")
f.write(content+"\n")
f.close
else:
#写在新文件里面
f = file(fileName,"a")
f.write(content+"\n")
f.close
#将旧的log文件打包tar
fileNameNew = path+"/"+cont
tar(fileNameNew)
#删除旧的文件
if os.path.exists(fileNameNew):
os.remove(fileNameNew)
#输出结果
print "程序执行成功"
print path
print filePrefix
print content