python实时处理log文件脚本
#!/usr/local/bin/python3.5
###Destription: 实时读取log信息
###Author: Danny Deng
###Datetime: 2016-11-17
import re,time,subprocess,os,linecache
###############定义log文件
file_name = "/var/log/mongodb/mongodb.log"
file_number = "/usr/local/zabbix_agent/number.txt"
j = int(0)
seek = int(0)
###############判断文件是否存在---判断number是否存在---判断number size 与 filesize
###############定义一个函数,遍历文件
def readline():
###############if判断 seek是否大于0,大于则赋值,否则初始为0
while True:
###############定义文件,根据seek值进行每行读取,每次tell赋值给seek
with open(file_name,'r') as f:
global seek
#seek = seek
f.seek(seek)
data = f.readline()
if data:
seek = f.tell()
yield data
else:
###############Python变量转换为shell变量
global file_number
os.environ['seek'] = str(seek)
os.environ['file_number'] = str(file_number)
###############记录上一次执行后的seek值,下次执行直接读取
os.system('echo $seek > $file_number')
os.system('chown zabbix.zabbix $file_number')
return
###############定义函数,find特定字符串从每行数据中
def func_for():
j = int(0)
for i in readline():
f_find = re.findall(r"error", i,flags=re.IGNORECASE)
if "error" in f_find:
j += 1
###############没有输出0,有值输出出现error匹配到的次数值
try:
print(j)
except NameError:
print(int(""))
###############判断文件是否存在
if os.path.isfile(file_name):
###############判断存储seek的文件是否存在
if os.path.isfile(file_number):
###############存在时,读取其seek值
seek_number = int(linecache.getline(file_number, 1))
###############如果有值判断seek值与现在文件大小值,大于说明log文件已重新生成,重置seek值为0
if os.path.getsize(file_name) >= seek_number and seek_number > 0:
seek = seek_number
func_for()
else:
seek = int(0)
func_for()
###############如果存储seek值的文件不存在,新建并出示seek值为0
else:
os.environ['file_number'] = str(file_number)
os.system('echo 0 > $file_number')
os.system('chown zabbix.zabbix $file_number')
func_for()
###############文件不存在 报错
else:
print("Error")
quit()
python实时处理log文件脚本的更多相关文章
- python遍历目录文件脚本的示例
例子 自己写的一个Python遍历文件脚本,对查到的文件进行特定的处理.没啥技术含量,但是也记录一下吧. 代码如下 复制代码 #!/usr/bin/python# -*- coding: utf-8 ...
- 利用python 提取log 文件里的关键句子,并进行统计分析
利用python开发了一个提取sim.log 中的各个关键步骤中的时间并进行统计的程序: #!/usr/bin/python2.6 import re,datetime file_name='/hom ...
- Python读取xlsx文件
Python读取xlsx文件 脚本如下: from openpyxl import load_workbook workbook = load_workbook(u'/tmp/test.xlsx') ...
- Shell脚本 | 抓取log文件
在安卓应用的测试过程中,遇到 Crash 或者 ANR 后,想必大家都会通过 adb logcat 命令来抓取日志定位问题.如果直接使用 logcat 命令的话,默认抓取出的 log 文件包含安卓运行 ...
- linux 执行shell脚本的时候,生成的log文件乱码
脚本执行后,生成的log文件,cat打开没有问题,vim打开就是文字乱码. file1完全没有问题,其他人的file2追加到file中间的时候就出现了这个问题. 因为使用notepad在win7写的, ...
- 将shell脚本的执行过程和执行结果导入到log文件中
[root@localhost scripts]# vim ping.sh #!/bin/bash set -x ##分步执行 exec &> /tmp/log.txt ##脚本执行的过 ...
- python基础之文件读写
python基础之文件读写 本节内容 os模块中文件以及目录的一些方法 文件的操作 目录的操作 1.os模块中文件以及目录的一些方法 python操作文件以及目录可以使用os模块的一些方法如下: 得到 ...
- 第二篇:python基础之文件读写
python基础之文件读写 python基础之文件读写 本节内容 os模块中文件以及目录的一些方法 文件的操作 目录的操作 1.os模块中文件以及目录的一些方法 python操作文件以及目录可以使 ...
- python 关于操作文件的相关模块(os,sys,shutil,subprocess,configparser)
一:os模块 os模块提供了许多允许你程序与操作系统直接交互的功能 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname&quo ...
随机推荐
- Android 系统功能设置菜单 LinearLayout与relativeLayout的实现
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- js常用操作代码
页面前进后退<input type=button value=刷新 onclick="window.location.reload()"><input type= ...
- bzoj1237
假如不存在相等的两个数不能配对,那很容易贪心得到,A中rank 1匹配B中rank 1 A中rank2 匹配B中rank 2…… 有了相等不能匹配这个条件,那么A中rank i可能和rank i,i- ...
- qt容器在并发时需要注意的地方
最近用tbb和qt写了一个延时摄影后期控制镜头的工具,主要就是扫描目录下所有图片,按照给定参数截取图片中某区域并另存,模拟镜头摆动. 扫描后的图片路径保存在qlist内,作为只读数据,交由tbb的pa ...
- POJ -- 2955
Brackets Description We give the following inductive definition of a “regular brackets” sequence: th ...
- Selenium - WebDriver 小结(1)
public class Base { SimpleDateFormat formatterTime = new SimpleDateFormat("yyyyMMdd_hhmmssa&quo ...
- bzoj 1493: [NOI2007]项链工厂(线段树)
1493: [NOI2007]项链工厂 Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 1256 Solved: 545[Submit][Status] ...
- bzoj 1027 [JSOI2007]合金(计算几何+floyd最小环)
1027: [JSOI2007]合金 Time Limit: 4 Sec Memory Limit: 162 MBSubmit: 2970 Solved: 787[Submit][Status][ ...
- List迭代循环时出现分问题
一个List,通过迭代之后给List中的实体重新赋值,代码如下 public List getListByPage(Page currPage) { Map recordTypeMap = BusnD ...
- attribute section的用法
1. gcc的__attribute__编译属性 要了解Linux Kernel代码的分段信息,需要了解一下gcc的__attribute__的编绎属性,__attribute__主要用于改变所声明或 ...