我正在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和生成器方面给出的建议。我会查看这些内容,寻找更好的解决方案。
time.sleep(0.1)
的问题:https://dev59.com/zaLia4cB1Zd3GeqPiGHS#44411621。 - Daniel Fthefile.seek(0,2)
做了什么? - Rylan Schaeffer0
是偏移量,2
表示相对于文件末尾进行查找。 - Jeff Bauer