当前位置: 首页 > 面试题库 >

从频繁更新的文件中读取

公羊学义
2023-03-14
问题内容

我目前正在Linux系统上以python编写程序。目的是在发现特定字符串后读取日志文件并执行bash命令。日志文件正在被另一个程序不断写入。

我的问题 :如果使用该open()方法打开文件,我的Python文件对象将随着其他程序写入实际文件而更新,还是我必须在一定时间间隔内重新打开文件?

更新 :感谢到目前为止的答案。我也许应该提到,该文件是由Java
EE应用程序写入的,所以我无法控制何时将数据写入该文件。我目前有一个程序,该程序每10秒重新打开一次文件,并尝试从文件的最后读取位置读取字节。目前,它只是打印出返回的字符串。我希望不需要重新打开文件,但read命令将以某种方式可以访问Java应用程序写入文件的数据。

#!/usr/bin/python
import time

fileBytePos = 0
while True:
    inFile = open('./server.log','r')
    inFile.seek(fileBytePos)
    data = inFile.read()
    print data
    fileBytePos = inFile.tell()
    print fileBytePos
    inFile.close()
    time.sleep(10)

感谢您提供有关pyinotify和generators的技巧。我将看看这些以获得更好的解决方案。


问题答案:

我建议看一下David Beazley的Python生成器技巧,尤其是
第5部分:处理无限数据 。它将tail -f logfile实时处理与命令等效的Python 。

# follow.py
#
# Follow a file like tail -f.

import time
def follow(thefile):
    thefile.seek(0,2)
    while True:
        line = thefile.readline()
        if not line:
            time.sleep(0.1)
            continue
        yield line

if __name__ == '__main__':
    logfile = open("run/foo/access-log","r")
    loglines = follow(logfile)
    for line in loglines:
        print line,


 类似资料:
  • 我希望有Apache Ignite经验的人能够帮助指导我的团队找到关于Apache Ignite新设置的答案。 数据从许多分布式传感器中不断产生,并流进我们的数据库。每个传感器每秒可能提供许多更新,但通常每秒生成<10个更新。 null 查询相当复杂,需要在时间上进行重要的(和动态的)回溯。一个查询可能需要来自一个站点中多个传感器的数据,但所需的传感器是动态确定的。大多数连续查询只需要最近几个小时

  • 问题内容: 嗨, 我的lucene索引经常用新记录更新,索引中有5,000,000条记录,并且正在使用FieldCache缓存我的一个数字字段。但是在更新索引之后,需要花费一些时间来重新加载FieldCache(由于重新加载缓存,导致文档说DocID不可靠),所以如何通过仅将新添加的DocID添加到FieldCache来最小化此开销,导致此功能成为瓶颈应用。 我想要一种通过仅将新添加的文档添加到数

  • 问题内容: 是否可以在经常修改的对象上使用缓存?例如,假设我们有一个BlogPost对象,并且有一个num_of_views列(以及其他)经常更改。是否可以在高速缓存和数据库中更新num_of_views字段,而无需破坏高速缓存对象并重新创建它?我可以手动完成,但是我担心同步问题。 问题答案: 是的。我不知道您的缓存状况如何,但是您可以随时替换缓存实例:

  • 我有一个日志文件,它不断更新新的数据行。我需要在java中获得新添加的数据。目前我的解决方案是: 但我有一种感觉,应该有更好的方法。我不喜欢内部有“睡眠”的持续运行循环的想法,我更喜欢某种事件驱动的方法。 如果每次修改文件时都依赖文件系统事件重新打开文件,则会产生延迟。 在这种情况下,正确的做法是什么? 提前谢谢!

  • 我有一个用例,需要将小文档批(通常是1到10个1KB的文档)上传到CloudSearch。每2或3秒就会上传一个新批次。批量上传的CloudSearch文档说: 确保您的批次尽可能接近5 MB的限制。上载大量较小的批次会减慢上载和索引过程。 如果在文档出现在搜索结果中之前有30秒的延迟,也可以。随着我的文档数量不断增加,比如说增加到50万个文档,我的实现能否正常工作?

  • 我使用将整个代码库从更改为 由于节俭,我从一开始就经常超时,我无法继续...采用CQL,按照我成功设计的表格和更少的超时.... 有了这个,我能够插入大量不符合节俭原则的数据…但是经过一个阶段,数据文件夹大约在3.5GB左右。我经常遇到写入超时异常。即使我再次做同样的早期工作用例,现在也会引发超时异常。它的随机曾经工作过,即使在重新设置后也无法再次工作。 CASSADNRA服务器日志 这是卡桑德拉