【python】用yield生成器模拟Linux中命令:tail -f file | grep python 用于查找监控日志文件中出现有python字样的行

【准备】:python文件读取f.seek的参数说明
file.seek()方法标准格式是:seek(offset,whence=0)
offset:开始的偏移量,也就是代表需要移动偏移的字节数
whence:给offset参数一个定义,表示要从哪个位置开始偏移;
0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。默认为0

yield作用和用法:

https://blog.csdn.net/u013965862/article/details/91129209

https://blog.csdn.net/u011318077/article/details/93749143

【栗子】:

# 注意程序只检测新增的日志信息!
#当程序运行时,若warn.log文件中末尾有新增一行,且该一行包含python,该行就会被打印出来
#若打开warn.log时,末尾已经有了一行包含python,该行不会被打印,因为上面是f.seek(0,2)移动到了文件EOF处
#故,上面程序实现了tail -f warn.log | grep 'python'的功能,动态实时检测warn.log中是否新增现了
#新的行,且该行包含python

def tail(f):
    # 移动到文件的EOF最后
    f.seek(0.2)
    while 1:
        # 读取文件中新的文本行
        line = f.readline()
        if not line:continue
        # yield 出每一行的数据
        yield line

def grep(lines,search_text):
    for line in lines:
        if search_text in line:
            yield line

if __name__ == '__main__':
    flog = tail(open('log.log'))
    py_lines = grep(flog,'python')
    for line in py_lines:
        print(line)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值