LinuxEye - Linux系统教程

LinuxEye - Linux系统教程

当前位置: 主页 > 脚本编程 >

实现Python版的tail -f功能

时间:2015-01-15 10:03来源:opstool.com 编辑:opstool 点击:
tail -f 的功能非常好用。我们用Python也可以实现这样的功能。 实现的原理是通过Python版本的inotify获得文件的更新消息,从而读取更新的行。pyinotify的下载地址 https://github.com/seb-m/pyinoti
tail -f 的功能非常好用。我们用Python也可以实现这样的功能。
实现的原理是通过Python版本的inotify获得文件的更新消息,从而读取更新的行。pyinotify的下载地址https://github.com/seb-m/pyinotify
下载解压后得到如下文件
#ls
ACKS  build  common  COPYING  dist  MANIFEST.in  old  python2  python3  README.md  setup.py

执行如下命令进行安装。
python setup.py build
python setup.py install 

然后就可以使用Python版本的inotify功能了。 下面是我写的一个简单的tail -f文件的实现。
import pyinotify
import time
import os
class ProcessTransientFile(pyinotify.ProcessEvent):
def process_IN_MODIFY(self, event):
line = file.readline()
if line:
print line, # already has newline
 
filename = '/tmp/test1234'
file = open(filename,'r')
#Find the size of the file and move to the end
st_results = os.stat(filename)
st_size = st_results[6]
file.seek(st_size)
 
wm = pyinotify.WatchManager()
notifier = pyinotify.Notifier(wm)
wm.watch_transient_file(filename, pyinotify.IN_MODIFY, ProcessTransientFile)
notifier.loop()
tail的文件为/tmp/test1234,通过向/tmp/test1234写入内容,可以看到python脚本可以动态显示更新的内容。 这个小脚本只是抛砖引玉。通过监听文件,尤其是日志文件可以实现很多诸如报警、自动控制等功能。

转载请保留固定链接: https://linuxeye.com/program/2090.html

------分隔线----------------------------
标签:Python
栏目列表
推荐内容