Python篇----命令行調用、輸出log日誌並打包的腳本

一 前言

這個腳本不夠健壯,只是我個人使用,處理一些大數據的業務。分享給大家,不要亂玩,會玩壞的。。。大家看看思路就好了。

該腳本將輸出今天的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


發佈了59 篇原創文章 · 獲贊 185 · 訪問量 47萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章