1

我试图每 15 分钟打开一个日志文件,看看该文件是否称为“finalize”字符串。我知道如何检查文件中的字符串,但我不知道是否有一种简单的方法可以让脚本每 15 分钟查看一次。

是否有某种模块可以让我这样做?

[编辑]我想要这个,因为我正在编写一个队列程序。也就是说,一旦一个作业调用 finalize,脚本将加载另一个作业,然后监视它直到它完成,等等。

4

3 回答 3

3

sched模块将允许您执行此操作。模块中的Timer类也是如此。threading

但是,对于您想要的东西,其中任何一个都过大了。

简单且通常最好的方法是使用系统的调度程序(Windows 上的计划任务、mac 上的启动服务cron或大多数其他系统上的相关程序)每 15 分钟运行一次程序。

或者,只需使用time.sleep(15*60), 并time.time()通过循环检查实际上是否比上次晚 15*60 秒。


从外部触发脚本的一个优点是它可以很容易地更改触发器。例如,您可以将其更改为每次修改文件时触发,而不是每 15 分钟触发一次,而根本不更改脚本。(当然,您执行此操作的确切方式取决于您的平台;LaunchServices、famd、inotify、FindFirstChangeNotification 等的工作方式都非常不同。但是每个现代平台都有一些方法可以做到这一点。)

于 2013-07-17T19:34:54.580 回答
2

看一下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)
于 2013-07-17T19:33:17.013 回答
0

您可以使用 sched 模块scheduler.run()函数等待下一个事件,然后执行它等等,直到没有更多的计划事件。您可以创建一个事件队列来执行此操作。查看 python 文档

于 2013-07-17T19:58:00.317 回答