安排Python脚本在没有cron的情况下每周日运行

时间:2015-10-08 04:31:36

标签: python cron

我有一个名为Sample.py的python文件,每个星期日都需要运行一次,不论时间如何。我希望整个脚本运行,而不是只有一个函数。

这可以在不使用cron的情况下完成吗?

我尝试寻找解决方案,但无法找到合适的解决方案。请帮帮我。

提前谢谢。

1 个答案:

答案 0 :(得分:2)

我们可以使用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中要运行的任何内容,execexecfile()中所述{3}}。我正在使用Python 3,但如果您使用的是Python 2,则可以直接使用s.enterabs()

在第一次调用onlyOnSunday()之前,我们计算到下周日需要多少天,然后计划第一次运行。随后,我们只计划下一个星期天,在预定时间内增加一周的秒数。请注意,下一次是根据首次调用Sample.py后立即获得的时间计算的,因此,如果cron需要(比方说)一小时运行,我们将不会在周日晚些时候滑倒预定的时间。

当然,100%Python解决方案会在系统中添加一个过程,如果使用result = function(arguments...) 则不需要该过程。