我试图每 15 分钟打开一个日志文件,看看该文件是否称为“finalize”字符串。我知道如何检查文件中的字符串,但我不知道是否有一种简单的方法可以让脚本每 15 分钟查看一次。
是否有某种模块可以让我这样做?
[编辑]我想要这个,因为我正在编写一个队列程序。也就是说,一旦一个作业调用 finalize,脚本将加载另一个作业,然后监视它直到它完成,等等。
我试图每 15 分钟打开一个日志文件,看看该文件是否称为“finalize”字符串。我知道如何检查文件中的字符串,但我不知道是否有一种简单的方法可以让脚本每 15 分钟查看一次。
是否有某种模块可以让我这样做?
[编辑]我想要这个,因为我正在编写一个队列程序。也就是说,一旦一个作业调用 finalize,脚本将加载另一个作业,然后监视它直到它完成,等等。
该sched
模块将允许您执行此操作。模块中的Timer
类也是如此。threading
但是,对于您想要的东西,其中任何一个都过大了。
简单且通常最好的方法是使用系统的调度程序(Windows 上的计划任务、mac 上的启动服务cron
或大多数其他系统上的相关程序)每 15 分钟运行一次程序。
或者,只需使用time.sleep(15*60)
, 并time.time()
通过循环检查实际上是否比上次晚 15*60 秒。
从外部触发脚本的一个优点是它可以很容易地更改触发器。例如,您可以将其更改为每次修改文件时触发,而不是每 15 分钟触发一次,而根本不更改脚本。(当然,您执行此操作的确切方式取决于您的平台;LaunchServices、famd、inotify、FindFirstChangeNotification 等的工作方式都非常不同。但是每个现代平台都有一些方法可以做到这一点。)
看一下python-tail模块:
import tail
def print_line(txt):
print 'finalize' in txt
t = tail.Tail('/var/log/syslog')
t.register_callback(print_line)
t.follow(s=60*15)
您可以使用 sched 模块scheduler.run()
函数等待下一个事件,然后执行它等等,直到没有更多的计划事件。您可以创建一个事件队列来执行此操作。查看 python 文档