天天看點

python實時過濾日志腳本

大神指導作品:

#!/usr/bin/python

#coding:utf8

from functools import wraps

from time import sleep

import os

RESTART='pm2 restart ios-push'

# coroutine 先要用 next 語句調用一次

def coroutine(fn):

    @wraps(fn)

    def wrapper(*args,**kwargs):

        ret=fn(*args,**kwargs)

        next(ret)

        return ret

    return wrapper

def follow(file,target):

    '''

    類似 Unix 的 tail -f, 但是接受一個 target, 有新的資料,交給 target 處理

    file.seek(0,2)# 直接到檔案的最後一行,類似 tail -f -n 0

    while True:

        line=file.readline()#讀取行

        if not line:

            sleep(0.5)# 如果是空行,直接 sleep 0.5s,然後 continue

            continue

        target.send(line)# 如果有新資料,則交給 target 處理

def action():

   if os.system(RESTART) == 0:

       print('ios-push restart success!')

    #print('restart')

@coroutine

def grep(pattern):

     '''

    grep 是一個 coroutine,接受一個 pattern 參數,需要從外部 send 資料 ,如果接受的資料比對 pattern 通過了,則調用action函數

        line = yield

        if pattern in line:

            action()

if __name__ == '__main__':

    follow(open('error.log','r'),grep('MaxListenersExceededWarn'))

本文轉自 妙曼  51CTO部落格,原文連結:http://blog.51cto.com/yanruohan/1949417,如需轉載請自行聯系原作者