如何在Python中拖尾日志文件?

我想在不阻塞或锁定的情况下在Python中提供tail -F或类似内容的输出。我在这里找到了一些非常老的代码来执行此操作,但是我认为现在必须有更好的方法或库来执行相同的操作。有人知道吗?

理想情况下,我希望tail.getNewData()每次需要更多数据时都可以打电话给我。

回答:

非阻塞

如果你使用的是Linux(因为Windows不支持在文件上调用select),则可以将subprocess模块​​与select模块一起使用。

import time

import subprocess

import select

f = subprocess.Popen(['tail','-F',filename],\

stdout=subprocess.PIPE,stderr=subprocess.PIPE)

p = select.poll()

p.register(f.stdout)

while True:

if p.poll(1):

print f.stdout.readline()

time.sleep(1)

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

封锁

你可以使用子流程模块,而无需额外的选择模块调用。

import subprocess

f = subprocess.Popen(['tail','-F',filename],\

stdout=subprocess.PIPE,stderr=subprocess.PIPE)

while True:

line = f.stdout.readline()

print line

当添加新行时,它还会打印新行,但是它将阻塞,直到尾部程序关闭为止,可能使用f.kill()

以上是 如何在Python中拖尾日志文件? 的全部内容, 来源链接: utcz.com/qa/415930.html

回到顶部