import time
import pickle
import os
log_file = "/var/log/syslog"
refer_file = "/home/fmr/log-scan.refer.temp"
def _get_refer(p_refer_file):
'''
@param:
p_refer_file 存放last scan的mtime、position的临时文件
@function
从指定的refer file中,读取其中存放的refer字典
@return
a dictionary like {'time': xxxxx , 'position':xxxxx}
'''
refer_file = p_refer_file
refer = {'time':time.time(), 'position':0}
if os.path.exists(refer_file):
with open(refer_file, 'rb') as referd:
try:
refer = pickle.load(referd)
except:
pass
#print(refer)
return refer
def _update_refer(p_refer,p_refer_file):
'''
@funciton
1. 将输入的refer序列化
2. 将序列化后的refer dict写入指定临时文件
@param
p_refer: 包含time、position的一个dict
p_refer_file: 存放序列化后的dict的临时文件
'''
refer = p_refer
refer_file = p_refer_file
with open(refer_file,'wb') as referd:
pickle.dump(refer, referd)
_update_refer({'time':time.time(), 'position':0}, refer_file)
while(True):
refer = _get_refer(refer_file )
file_mtime = os.path.getmtime(log_file)
if file_mtime <= refer['time']:
#print("file mtime did not change since last scan")
refer['time'] = file_mtime
_update_refer(refer,refer_file)
continue
file_size = os.path.getsize(log_file)
if file_size <= refer['position']:
#print("file size did not change since last scan")
refer['position'] = file_size
_update_refer(refer,refer_file)
continue
print("the file has changed , start to scan")
with open(log_file) as logfd:
logfd.seek(refer['position'], os.SEEK_SET)
#for line in logfd.readline():
#print(line)
line = logfd.readline()
while(line):
print(line)
#此处将读取到的每行数据上传至TDengine即可
line = logfd.readline()
refer = {'time':time.time(), 'position':logfd.tell()}
_update_refer(refer, refer_file)
python实现文件增量内容扫描(类似shell中的tail指令)
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 问题现象: 在使用 Android Studio 进行 Android 开发过程中,突然间出现了文件乱码的问...
- 前几天项目有一个类似发微博时@用户的需求,网上也没找到比较好的第三方,自己DIY了一个,希望可以帮到有需要的朋友!...
- 已离开简书,原因参见 http://www.jianshu.com/p/0f12350a6b66。 虽人微言轻,但...
- 本文 附加的代码 demo 就是实现聊天页面类似微信,陌陌等聊天信息被泡泡包裹。使得页面展示美观专业。 demo中...
- 由于对高大上的前端处理不太熟悉,想直接通过MVC的方式进行内容传递,因此选用了Thymeleaf模版处理向前端传值...