python实现tail - f功能的示例

  介绍

小编给大家分享一下python实现tail - f功能的示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

tailf与tail - f类似:当文件不增长时并不访问文件
tail - f:只跟踪文件内容
tail - f:文件内容与文件名都跟踪

这篇文章最初是因为重启的群里,有人去面试,笔试题有这个题,不知道怎么做,什么思路,就发群里大家讨论

我想了一下,简单说一下我的想法吧,当然,也有很好用的pyinotify模块专门监听文件变化,不过我更想介绍的,是解决的思路,毕竟作为面试官,还是想看到一下解决问题的思路,而且我觉得这一题的难点不在于监控文件增量,而在于怎么打印最后面10行

希望大家读这篇文章前,对python基础,处理文件和常用模块有一个简单的了解,知道下面几个名词是啥

开放(& # 39;a.txt& # 39;)   file.seek   file.tell   time . sleep ()

下面思路限于我个人知识,免不了有错误和考虑不周的,希望大家有更好的方法提出来,我随时优化代码,题目的感觉没啥太多的坑,下面让天真烂漫的蜗牛教大家用python的思路

<强>怎么用python实现

其实思路也不难啦

<李>

打开这个文件,指针移到最后

<李>

每隔一秒就尝试readline一下,有内容就打印出来,没内容就睡眠

<李>

大概就是这么个意思

<强>监听文件

思路如下:

<李>

用开放打开文件

<李>

用寻求文件指针,给大爷把跳到文件最后面

<李>

而真正进行循环

持续不停的readline,如果能读到内容,打印出来即可

代码呼之欲出

with 开放(& # 39;用法# 39;),as  f:   f.seek才能(0,2)   while 才能正确的:   ,,,last_pos =, f.tell ()   ,,,line =, f.readline ()   ,,,if 线:   ,,,,,print 行

代码说明

<李>

寻求第二个参数2,意思就是从文件结尾处开始,寻求更标准的写法使用os模块下面的SEEK_END,可读性更好

<李>

只写出了简单的逻辑,代码简单粗暴,如果这个题目是10分的话,最多也就拿4分吧,不能再多了

<>强优化点

<李>

打印有缺陷,每次都是新的一行,换成sys.stdout.write(线)更和谐

<李>

文件名传参,不能写死

<李>

直接打印可以当成默认行为,具体要做什么,可以写成函数处理,这样我们就可以把新行做其他处理,比如展示在浏览器里

<李>

加上容错处理,比如文件不存在会报错

<李>

,而真正一直都文件,比较耗性能,每读一次,间隔一秒比较靠谱

<李>

调用time . sleep (1)

<李>

用类来组织代码

实例代码如下

# !/usr/bin/env  python   #,- *安康;编码:utf-8  - *   import 系统   import 时间   class 尾():   def 才能__init__(自我、file_name调=sys.stdout.write):   ,,,self.file_name =file_name   ,,,self.callback =回调   def 才能;遵循(自我):   ,,,试一试:   ,,,,,with 开放(self.file_name), as  f:   ,,,,,,,f.seek (0, 2)   ,,,,,,,while 正确的:   ,,,,,,,,,line =, f.readline ()   ,,,,,,,,,if 线:   ,,,,,,,,,,,self.callback(线)   ,,,,,,,,,time . sleep (1)   ,,,except 例外,e:   ,,,,,print  & # 39;打开文件失败,囧,看看文件是不是不存在,或者权限有问题& # 39;   ,,,,,print  e

使用方法:

#,使用默认的sys.stdout.write打印到屏幕   py_tail =,尾巴(& # 39;用法# 39;)   py_tail.follow ()   #,自己定义处理函数   def  test_tail(线):   print 才能;& # 39;xx # 39; +线+ & # 39;xx # 39;   py_tail1 =,尾巴(& # 39;用法# 39;,,test_tail)   py_tail1.follow ()

咦等等,tail - f默认还会打印最后10行,这个好像才是这个题目的难点所,在众所周知,python里读文件指针,只能移动到固定位置,不能判断是哪一行,囧,先实现简单的,逐渐加强吧

默认打印最后10行

现在这个代码,大概能拿6分啦,我们还有一个功能没做,那就是打印最后n行,默认是10行,现在把这个功能加上,加一个函数就行啦

文件小的时候

python实现tail - f功能的示例