我想在 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(使用前将#替换为@)