定时运行Python脚本,不使用cron,每周日运行

3

我有一个名为Sample.py的Python文件,需要每周日运行一次,不考虑时间。我希望整个脚本都能运行,而不仅仅是其中的一个函数。

是否可以在不使用cron的情况下完成?

我尝试过寻找解决方案,但没有找到正确的解决方案。请帮我解决这个问题。

提前感谢您的帮助。


你基本上想要编写自己的cron吗?为什么呢? - undefined
1个回答

3
我们可以使用Python的sched模块和exec()函数来执行脚本。因此,给定Sample.py文件:
print ("Hello World")

我们可以编写另一个脚本sched_sample.py


import sched, time

dayLen = 86400  # seconds
weekLen = 7     # days

dayLen = 1      # We make the days 1 second long for testing

def onlyOnSunday ():
    tt = time.localtime()
    exec(open("./Sample.py").read())
    t = time.mktime(tt)+dayLen*weekLen
    s.enterabs (t,0,onlyOnSunday)

s = sched.scheduler(time.time, time.sleep)
tt = time.localtime()
t = time.mktime(tt)+(6-tt.tm_wday)*dayLen
s.enterabs (t,0,onlyOnSunday)
s.run ()    # Run all scheduled events

这里使用了最新回答中描述的方法来调度一个任务,该回答链接为Scheduling a task on python。初始调度运行Sample.py,并按照What is an alternative to execfile in Python 3.0?中的回答执行exec。如果您使用的是Python 2,则可以直接使用execfile()

在第一次调用s.enterabs()之前,我们计算需要多少天才能到下一个星期日,并将第一次运行安排在那时。随后,我们只需按照下一个星期日安排,添加一周的秒数即可。请注意,下一个时间是从onlyOnSunday()第一次调用后立即获取的时间计算出来的,因此,如果Sample.py需要(例如)一个小时才能运行,我们不会让预定的时间推迟到星期日晚些时候。

当然,100% Python的解决方案会增加一个系统进程,如果使用cron则不需要这个进程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接