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

2024-05-14

我想在 Python 中提供 tail -F 或类似内容的输出,而无需阻塞或锁定。我找到了一些非常旧的代码来做到这一点here http://code.activestate.com/recipes/436477-filetailpy/,但我认为现在必须有更好的方法或图书馆来做同样的事情。有人知道其中一个吗?

理想情况下,我会有类似的东西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) and print f.stdout.readline()将被替换为有用的代码。

Blocking

您可以使用 subprocess 模块,而无需额外的 select 模块调用。

import subprocess
f = subprocess.Popen(['tail','-F',filename],\
        stdout=subprocess.PIPE,stderr=subprocess.PIPE)
while True:
    line = f.stdout.readline()
    print line

这也会在添加新行时打印它们,但它会阻塞,直到尾部程序关闭,可能是f.kill().

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Python 中跟踪日志文件? 的相关文章

随机推荐