我正在尝试跟踪另一个正在运行的程序正在创建的日志文件。如果在更新的日志中找到单词“day”(这意味着其他代码已成功运行),我想返回 True。问题是 - 有时其他程序不成功,只是卡在同一行,如果发生这种情况,我想返回 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 返回相同的东西,并且当日志确实仍在更新时总是返回 false (我可能没有正确执行,我是新手)。当我尝试跟踪文件的大小(使用 os.stat)时,它也返回了相同的内容。
我也试过用
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
当其他程序运行得非常快但似乎有点超时并在代码运行时间过长时返回 false 时,这很有效。
我对为什么找不到一致的解决方案感到有些困惑。跟踪文件的大小或行甚至时间差似乎是一个好主意,但我似乎无法实现它。我想找到最简单的解决方案,而无需下载我在其他帖子中出现的看门狗之类的东西。任何帮助,将不胜感激!谢谢。