如何在Python中跟踪日志文件?

我希望在Python中提供tail-F或类似的输出,而无需阻塞或锁定。我在这里找到了一些非常古老的代码来做这件事,但我认为现在一定有更好的方法或库来做同样的事情。有人知道吗

理想情况下,我会有类似于tail.getNewData()的东西,每次需要更多数据时都可以调用它

非阻塞

如果您在linux上(因为windows不支持在文件上调用select),则可以将子流程模块与select模块一起使用

导入时间
导入子流程
导入选择
f=subprocess.Popen([‘tail’,’-f’,filename]\
stdout=子流程.PIPE,stderr=子流程.PIPE)
p=select.poll()
p、 寄存器(f.stdout)
尽管如此:
如果p.poll(1):
打印f.stdout.readline()
时间。睡眠(1)

这将轮询输出管道以获取新数据,并在数据可用时进行打印。通常,time.sleep(1)print f.stdout.readline()将被有用的代码替换

阻塞

您可以使用子流程模块,而无需额外的select模块调用

导入子流程
f=subprocess.Popen([‘tail’,’-f’,filename]\
stdout=子流程.PIPE,stderr=子流程.PIPE)
尽管如此:
line=f.stdout.readline()
打印行

这也会在添加新行时打印新行,但它会一直阻止,直到tail程序关闭,可能是使用f.kill()

发表评论