我有一个名为Sample.py的python文件,每个星期日都需要运行一次,不论时间如何。我希望整个脚本运行,而不是只有一个函数。
这可以在不使用cron的情况下完成吗?
我尝试寻找解决方案,但无法找到合适的解决方案。请帮帮我。
提前谢谢。
答案 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
中要运行的任何内容,exec
如execfile()
中所述{3}}。我正在使用Python 3,但如果您使用的是Python 2,则可以直接使用s.enterabs()
。
在第一次调用onlyOnSunday()
之前,我们计算到下周日需要多少天,然后计划第一次运行。随后,我们只计划下一个星期天,在预定时间内增加一周的秒数。请注意,下一次是根据首次调用Sample.py
后立即获得的时间计算的,因此,如果cron
需要(比方说)一小时运行,我们将不会在周日晚些时候滑倒预定的时间。
当然,100%Python解决方案会在系统中添加一个过程,如果使用result = function(arguments...)
则不需要该过程。