大神指導作品:
#!/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,如需轉載請自行聯系原作者