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

发布于 2021-02-02 23:15:29

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

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

关注者
0
被浏览
69
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    非阻塞
    如果你使用的是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()



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看