我想要一个使我的主程序每周运行两次的程序...我尝试使用crontab,但是由于我正在Windows上进行编程(结果很困难),所以我无法使其正常运行,并且我想要该程序在Windows上运行
我的主程序没有做任何疯狂的事情,只是检查一个excel文件并在tkinter窗口中为您提供一些信息
我也了解了Windows中的任务计划程序,但是我想在程序中自由编辑或删除计划的事件... any help
?
答案 0 :(得分:0)
有一个简单的方法可以做到这一点,亲爱的朋友! 首先,您应该在计算机上使用Linux OS安装虚拟机(使用virtualbox和vmware)。 您可以只使用Linux crontab!
cronb -e
并使用您喜欢的编辑器,并编写此行
0 8 * * 3,7 python /path/to/dir/test.py
,您的代码将在周三和周日的08:00执行。
答案 1 :(得分:0)
您可以使用Task Scheduler API以编程方式创建计划的任务。例如:https://ziade.org/2007/11/01/scheduling-tasks-in-windows-with-pywin32/
如果您不想让pywin32成为该项目的依赖项,则可以使用子进程库通过调用schtask.exe来进行更简单的调度。
答案 2 :(得分:0)
使用Croniter解决。它适用于Linux。在Windows上尝试。
from datetime import datetime, timedelta #for Scheduler
import time
from croniter import croniter
# Class for Scheduling
class schedule_fun():
def starter(self):
nextRunTime = self.getNextCronRunTime(schedule)
while True:
roundedDownTime = self.roundDownTime()
if (roundedDownTime == nextRunTime):
global timestamp
timestamp = datetime.now().strftime("%B %d %Y, %H:%M:%S")
#For setting variables with values
print ("Hi, I am Steven")
nextRunTime = self.getNextCronRunTime(schedule)
elif (roundedDownTime > nextRunTime):
print("error")
# We missed an execution. Error. Re initialize.
nextRunTime = self.getNextCronRunTime(schedule)
self.sleepTillTopOfNextMinute()
# Round time down to the top of the previous minute
def roundDownTime(self,dt=None, dateDelta=timedelta(minutes=1)):
roundTo = dateDelta.total_seconds()
if dt == None : dt = datetime.now()
seconds = (dt - dt.min).seconds
rounding = (seconds+roundTo/2) // roundTo * roundTo
return dt + timedelta(0,rounding-seconds,-dt.microsecond)
# Get next run time from now, based on schedule specified by cron string
def getNextCronRunTime(self,schedule):
return croniter(schedule, datetime.now()).get_next(datetime)
# Sleep till the top of the next minute
def sleepTillTopOfNextMinute(self):
t = datetime.utcnow()
sleeptime = 60 - (t.second + t.microsecond/1000000.0)
time.sleep(sleeptime)
# Program starts here!!!!
if __name__ == '__main__':
schedule = '*/1 * * * *'
scl = schedule_fun()
scl.starter()
答案 3 :(得分:-1)
Apache airflow将完成工作
每个DAG可能有也可能没有时间表,该时间表告知如何创建DAG运行。 schedule_interval被定义为DAG参数,并且最好接收cron表达式作为str或datetime.timedelta对象。另外,您也可以使用这些cron“预设”之一