我有一个名为Sample.py的Python文件,需要每周日运行一次,不考虑时间。我希望整个脚本都能运行,而不仅仅是其中的一个函数。
是否可以在不使用cron的情况下完成?
我尝试过寻找解决方案,但没有找到正确的解决方案。请帮我解决这个问题。
提前感谢您的帮助。
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
则不需要这个进程。