Python 跟踪持续更新日志文件的问题
Python issue with tracking continuously updated log file
我正在尝试跟踪由另一个 运行ning 程序创建的日志文件。如果在更新的日志中找到 'day' 一词,我想 return 为真(这意味着其他代码已成功 运行 )。问题是 - 有时其他程序不成功,只是卡在同一条线上,如果发生这种情况,我想 return false。我已经尝试使用 seek() 和 tell() 跟踪它是否卡在同一条线上,如下所示:
def is_successful_test(self):
'''
checks if external code was successful
'''
day_out = os.path.join(self.working_dir, 'day.out')
day_out = open(day_out)
i = 0
while True:
day_out.seek(i)
latest_line = day_out.readline()
i_old = dat_out.tell()
if 'day' in latest_line:
return True
time.sleep(60)
i = aims_out.tell()
if i == i_old:
self.output("day file not updating")
break
return False
但这对 i 和 i_old 总是 return 同样的事情,并且当日志确实仍在更新时总是 returns false(我可能没有正确地做我是一个新手)。当我尝试跟踪文件大小时(使用 os.stat),它也 return 编辑了同样的东西。
我也试过,
def is_successful(self):
'''
checks if external code was successful
'''
day_out = os.path.join(self.working_dir, 'day.out')
day_out = open(day_out,"r")
while True:
line = day_out.readline()
if line == '':
break
if 'day' in line:
day_out.close()
return True
day_out.close()
return False
当其他程序 运行 运行速度非常快但似乎有点超时并且如果代码已经 运行 太久时 return false 时,这很有效。
我有点困惑为什么我找不到一致的解决方案。跟踪文件的大小或行甚至时差似乎是个好主意,但我似乎无法实现它。我想找到最简单的解决方案,而无需下载我在其他帖子中看到的 watchdog 之类的东西。任何帮助,将不胜感激!谢谢
您正试图以毫无意义的方式使用 seek
和 tell
:tell
只是 return 当前开仓的偏移量文件(在当前进程中)- 如果文件在其他进程中再次打开并且打开文件的实例位于另一个位置,则不会 return 不同的数字。
除非在调用 tell
之前发出 seek
要求将光标放置在文件末尾:day_out.seek(0, OS.SEEK_END)
。但是你的想法太绕了,也不行。
对于你想要的,你可以继续在你的文件上发出 readline
:如果你在文件末尾输入 ar,你将得到一个空字符串。如果其他进程从您的光标所在的位置写入了额外的行,则将检索下一行。
counter = 0
while True:
line = day_out.readline()
if "day" in line:
do_things()
counter = 0
elif line == '':
time.sleep(60)
counter += 1
if counter > 5:
output("day file not updating")
我正在尝试跟踪由另一个 运行ning 程序创建的日志文件。如果在更新的日志中找到 'day' 一词,我想 return 为真(这意味着其他代码已成功 运行 )。问题是 - 有时其他程序不成功,只是卡在同一条线上,如果发生这种情况,我想 return false。我已经尝试使用 seek() 和 tell() 跟踪它是否卡在同一条线上,如下所示:
def is_successful_test(self):
'''
checks if external code was successful
'''
day_out = os.path.join(self.working_dir, 'day.out')
day_out = open(day_out)
i = 0
while True:
day_out.seek(i)
latest_line = day_out.readline()
i_old = dat_out.tell()
if 'day' in latest_line:
return True
time.sleep(60)
i = aims_out.tell()
if i == i_old:
self.output("day file not updating")
break
return False
但这对 i 和 i_old 总是 return 同样的事情,并且当日志确实仍在更新时总是 returns false(我可能没有正确地做我是一个新手)。当我尝试跟踪文件大小时(使用 os.stat),它也 return 编辑了同样的东西。
我也试过,
def is_successful(self):
'''
checks if external code was successful
'''
day_out = os.path.join(self.working_dir, 'day.out')
day_out = open(day_out,"r")
while True:
line = day_out.readline()
if line == '':
break
if 'day' in line:
day_out.close()
return True
day_out.close()
return False
当其他程序 运行 运行速度非常快但似乎有点超时并且如果代码已经 运行 太久时 return false 时,这很有效。
我有点困惑为什么我找不到一致的解决方案。跟踪文件的大小或行甚至时差似乎是个好主意,但我似乎无法实现它。我想找到最简单的解决方案,而无需下载我在其他帖子中看到的 watchdog 之类的东西。任何帮助,将不胜感激!谢谢
您正试图以毫无意义的方式使用 seek
和 tell
:tell
只是 return 当前开仓的偏移量文件(在当前进程中)- 如果文件在其他进程中再次打开并且打开文件的实例位于另一个位置,则不会 return 不同的数字。
除非在调用 tell
之前发出 seek
要求将光标放置在文件末尾:day_out.seek(0, OS.SEEK_END)
。但是你的想法太绕了,也不行。
对于你想要的,你可以继续在你的文件上发出 readline
:如果你在文件末尾输入 ar,你将得到一个空字符串。如果其他进程从您的光标所在的位置写入了额外的行,则将检索下一行。
counter = 0
while True:
line = day_out.readline()
if "day" in line:
do_things()
counter = 0
elif line == '':
time.sleep(60)
counter += 1
if counter > 5:
output("day file not updating")