我目前正在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)
Run Code Online (Sandbox Code Playgroud)
感谢pyinotify和发电机的提示.我打算看看这些更好的解决方案.
所以现在我需要创建并实现将用于登录数据库的Python日志记录模块的扩展.基本上我们有几个python应用程序(都在后台运行),当前记录到文本文件的随机混搭.这使得几乎不可能发现某个应用程序是否失败.
给我的问题是将所述日志记录移动到文本文件到oracle DB.这些表已经被定义,并且需要记录的东西,但是现在,我正在寻找添加另一个将记录到数据库的日志记录处理程序.
我使用的是python 2.5.4和cx_Oracle,一般应用程序可以作为服务/守护程序或直接应用程序进行以太运行.
我只是好奇地想知道最好的方法是什么.几个问题:
如果cx_Oracle发生任何错误,应将这些错误记录在哪里?如果它的下降最好只是让记录器退回到默认文本文件?
一段时间后,我们开始强制人们使用sys.stderr/stdout.write而不是print,所以最糟糕的情况是我们不会遇到任何关于print被弃用的问题.有没有办法无缝地将所有成千上万的sys.std调用直接传送到记录器中,并让记录器拾取松弛?
在每条记录的消息之后,脚本是否应自动执行提交?(每秒会有几十个.)
为日志记录系统实现新处理程序的最佳方法是什么?从基本的Handler类继承似乎是最简单的.
任何想法/建议都会很棒.