gpt4 book ai didi

python - 从经常更新的文件中读取

转载 作者:IT老高 更新时间:2023-10-28 20:38:56 24 4
gpt4 key购买 nike

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

我的问题:如果我使用 open() 方法打开文件,我的 Python 文件对象会随着其他程序写入实际文件或我是否必须定期重新打开文件?

更新:感谢到目前为止的回答。我也许应该提到该文件是由 Java EE 应用程序写入的,因此我无法控制何时将数据写入其中。我目前有一个程序,它每 10 秒重新打开一次文件,并尝试从文件中最后一次读取的字节位置读取。目前它只是打印出返回的字符串。我希望文件不需要重新打开,但读取命令会以某种方式访问​​ 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 和生成器的提示。我将看看这些以获得更好的解决方案。

最佳答案

我建议您查看 David Beazley 的 Generator Tricks for Python ,尤其是第 5 部分:处理无限数据。它将实时处理 Python 等效的 tail -f logfile 命令。

# 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,

关于python - 从经常更新的文件中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5419888/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com