前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python代码实现linux下的tail功能

python代码实现linux下的tail功能

作者头像
the5fire
发布2019-02-28 16:15:03
1.8K0
发布2019-02-28 16:15:03
举报
文章被收录于专栏:Python程序员杂谈

今天在服务器上调试程序,发现win03的服务器在查看apache输出日志的时候灰常麻烦,想到linux下系统的命令 tail就可以实时查看输出日志,于是找了下,还真有人写了个win下的tail:http://www.kuaipan.cn/file/id_12834302878348914.htm

后来想了想,自己用python写一个也不麻烦,权当练手于是有了下面的代码:

代码语言:javascript
复制
#coding=utf-8
'''
    author:the5fire
    blog:http://www.the5fire.com
    date:2012-07-03
'''
import sys
already_print_num = 0

def get_last_line(filepath):
    '''
    获取未输入的行
    '''
    global already_print_num
    import  os
    if not os.path.exists(filepath):
        print 'no such file %s' % filepath
        sys.exit()
        return
    readfile = open(filepath, 'r')
    lines = readfile.readlines()
    if len(lines) > 20 and already_print_num == 0:
        #last_num = 20  #首次输出最多输出20行
        #经nonoob指正,修改如下
        already_print_num = len(lines) - 20

    if already_print_num < len(lines):
        print_lines = lines[already_print_num - len(lines):]
        for line in print_lines:
            print len(lines), already_print_num, line.replace('\n','')
        already_print_num = len(lines)
    readfile.close()



def timer(filename):
    '''
    每隔1秒执行一次
    '''
    while True:
        get_last_line(filename)
        import time
        time.sleep(1)

if __name__ == '__main__':
    if len(sys.argv) < 2:
        print 'illegal params'
    else:
        filename = sys.argv[1]
        timer(filename)

代码不是很严谨,有兴趣的自己扩展

运行方法:

把该py文件放到你要统计的日志文件所在目录,然后运行:python xxx.py logs.log(×nux系统注意权限)

为了方便测试,自己写了一个不断写文件的代码,主要是每隔10秒,写入一条数据

代码语言:javascript
复制
#coding=utf-8
'''
	author:the5fire
	blog:http://www.the5fire.com
	date:2012-07-03
'''

import time

def writefile(filename):
    counter = 0
    while True:
        writefile = open(filename, 'a')
        writefile.write('test' + str(counter) + '\n')
        writefile.close()
        counter += 1
        print  counter
        time.sleep(10)

if __name__ == '__main__':
    import sys
    if len(sys.argv) == 2:
        filename = sys.argv[1]
        writefile(filename)

使用方法同上。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012-07-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档