把找出的异常文件,归类到指定目录
# !/usr/bin/env python # coding:utf-8 import os,sys,tempfile,time,datetime,re import string from smtplib import SMTP from email import MIMEText from email import Header from os.path import getsize from sys import exit from re import compile, IGNORECASE now = datetime.datetime.now() strdatetime1 = now.strftime("%Y%m%d") strdatetime = now.strftime("%Y/%m/%d") tomcat_log = ‘/home/logs/‘ last_position_logfile = ‘/home/back/test/last_position.txt‘ #error_list_logfile = ‘/home/back/test/error_list.txt‘ error_list_logfile1 = ‘/home/back/test/error_list‘ Date=now.strftime("%d") error_list_logfile = error_list_logfile1 + strdatetime1 + ".txt" print error_list_logfile errorfile=error_list_logfile pattern = compile(r‘Exception|^\t+\bat\b‘, IGNORECASE) #fp = open(error_list_logfile, "w+") def writeToTxt(list_name, file_path): try: fp = open(file_path, "a+") for item in list_name: fp.write(str(item) + "\n") fp.close() except IOError: print("fail to open file") # 分析文件找出异常的行 def analysis_log(file): #parent_file = os.path.dirname(file) error_list = [] try: data = open(file, ‘r‘) except: exit() for line in data: if pattern.search(line): error_list.append(file) #print error_list #errors_list += 1 #print "%s" %file break data.close() if len(error_list)==1: #return ‘‘.join(error_list) writeToTxt(error_list,error_list_logfile) #return error_list #if errors_list == 1: #print "%s num is %d" %(file,errors_list) #print ‘‘.join(errors_list) def walk(local_dir): for root, dirs, files in os.walk(local_dir): for filespath in files: # return filespath local_file = os.path.join(root, filespath) # print error_info2 error_info = analysis_log(local_file) def walk_dir(home_dir): homedir=[] for root, dirs, files in os.walk(home_dir): for dirname in dirs: local_dir = os.path.join(root, dirname) #print "Date is %s" %Date result = string.find(local_dir,strdatetime)!=-1 if result: #print local_dir.count(‘/‘) if local_dir.count(‘/‘)==8: homedir.append(local_dir) return homedir def make_ex(errorfile): with open(errorfile) as f: exfile = [] exdict = {} for i in f.readlines(): expname = i.strip().split(‘/‘)[3] exname = i.strip().split(‘/‘)[8] # if expname not in exfile: # exfile.append(exname) estr = i.strip() #print estr youpattern = re.compile(‘/(\w+)/(\w+)/(\w+)‘) result = youpattern.match(estr) r1 = result.group() r2 = "ex/" + strdatetime1 r3 = exname rall = [r1, r2, r3] # exdict[r1] rexall = "/".join(rall) + ‘/‘ #print rexall if not os.path.exists(rexall): os.makedirs(rexall) os.system(‘cp -r %s %s‘ % (estr, rexall)) def make_diff_ex(c): for j in c: i=str(j) expname = i.strip().split(‘/‘)[3] exname = i.strip().split(‘/‘)[8] # if expname not in exfile: # exfile.append(exname) estr = i.strip() #print estr youpattern = re.compile(‘/(\w+)/(\w+)/(\w+)‘) result = youpattern.match(estr) if result: r1 = result.group() r2 = "ex/" + strdatetime1 r3 = exname rall = [r1, r2, r3] # exdict[r1] rexall = "/".join(rall) + ‘/‘ #print rexall if not os.path.exists(rexall): os.makedirs(rexall) os.system(‘cp -r %s %s‘ % (estr, rexall)) ‘‘‘ def temps(errorfile): tmpfile = tempfile.NamedTemporaryFile(delete=False) with open(errorfile,‘rw‘) as f: readfile="\n".join(f.readlines) tmpfile.write(str(f.readlines())) return tmpfile ‘‘‘ def temps(errorfile): tmpfile=[] with open(errorfile,‘rw‘) as f: tmpfile.append(f.readlines()) return tmpfile def list_diff(a, b): ret = [] for i in a: if i not in b: ret.append(i) return ret if __name__ == ‘__main__‘: if not os.path.exists(errorfile): fp = open(error_list_logfile, "w+") tomcat_last_dir = walk_dir(tomcat_log) for i in tomcat_last_dir: walk(i) make_ex(errorfile) else: a=temps(errorfile) fp = open(error_list_logfile, "w+") tomcat_last_dir = walk_dir(tomcat_log) for i in tomcat_last_dir: walk(i) tmpfiles = [] b=temps(errorfile) c=list_diff(a,b) if c: make_diff_ex(c)
本来想用tempfile模块的,还要研究下。
本文出自 “python 运维” 博客,谢绝转载!
原文:http://szgb17.blog.51cto.com/340201/1915646