您好,登錄后才能下訂單哦!
客戶的系統(tǒng)出各種問題,這次出了問題整整一天都沒找出原因,都紅臉了,最后發(fā)現(xiàn)是系統(tǒng)配置文件被改掉了,簡(jiǎn)直不能忍,所以寫了這個(gè)腳本,放到定時(shí)任務(wù)里面,每天備份比較配置文件 import difflib import os import time import shutil from AFALogger import LoggerError,LoggerInfor from traceback import format_exc; def compareFile(file1,file2): #比較兩個(gè)文件的內(nèi)容是否相同 try: file_handle_1 = open(file1) file_handle_1_read = file_handle_1.readlines() file_handle_1.close() # LoggerInfor(str(file_handle_1_read)) file_handle_2 = open(file2) file_handle_2_read = file_handle_2.readlines() file_handle_2.close() # LoggerInfor(str(file_handle_2_read)) diff = ''.join(difflib.ndiff(file_handle_1_read,file_handle_2_read)) diffInfo=[] for line in diff.split('\n'): if line !='': if line[0] in ('+','-'): diffInfo.append(line) else: continue return diffInfo except: LoggerInfor(str(file2+'\nerror')) #將錯(cuò)誤的文件寫入日志,當(dāng)文件名亂碼的時(shí)候會(huì)出現(xiàn)錯(cuò)誤 return [file2+'\nerror',] def compareResultWriteFile(file2,diffInfo,resultFilename): #將不同的地方寫入文件 file_handle = open(resultFilename,'a') file_handle.write(file2+' Start\n') for line in diffInfo: file_handle.write(line+'\n') file_handle.write(file2+' END\n\n') file_handle.close() def getAllFilename(directoryOrFilename): #在輸入為目錄的時(shí)候,獲取目錄下所有文件 allFilename=[] for name in directoryOrFilename.split(','): if os.path.isdir(name): for path,dirs,files in os.walk(name): for fn in files: allFilename.append(path+'/'+fn) elif os.path.isfile(name): allFilename.append(name) else: continue return allFilename def backupFile(resultDir,filename): #將本日文件備份 try: filepath_list=filename.split('/') filepath='_'.join(filepath_list[3:-1]) shutil.copy(filename,resultDir+'/'+filepath_list[-1]+'_'+filepath) except: return '' def cfgCompare(sourceFile,destinationDir): ''' @使用范例: cfgCompare('/home/iqms/lyb,/home/iqms/qm_info','/home/iqms/cfgDir') ''' try: if not type(sourceFile) is str: return [0, "ERR001", "sourceFile參數(shù)必須為str類型", [None]]; if not type(destinationDir) is str: return [0, "ERR001", "destinationDir參數(shù)必須為str類型", [None]]; allFilename = getAllFilename(sourceFile) yesterdayDestinationDir = destinationDir+'/'+time.strftime('%Y%m%d',time.localtime(time.time()-24*60*60)) destinationDir = destinationDir+'/'+time.strftime('%Y%m%d') os.mkdir(destinationDir) for filename in allFilename: filepath_list=filename.split('/') #拼文件名 if filepath_list[-1].startswith('.'): continue filepath='_'.join(filepath_list[3:-1]) #拼文件名 backupFile(destinationDir,filename) if os.path.exists(yesterdayDestinationDir): # diffInfo=compareFile(yesterdayDestinationDir+'/'+filename.split('/')[-1],filename) # diffInfo=compareFile(yesterdayDestinationDir+'/'+filename.split('/')[-1],destinationDir+'/'+filename.split('/')[-1]) diffInfo=compareFile(yesterdayDestinationDir+'/'+filepath_list[-1]+'_'+filepath,destinationDir+'/'+filepath_list[-1]+'_'+filepath) compareResultWriteFile(filename.split('/')[-1],diffInfo,destinationDir+'/log') else: continue return [1, None, None, [None]]; except Exception, e: LoggerError(str(format_exc())); return [2, 'A015017', '異常:'+str( e ), [None]];
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。