我想使用python sched安排函数在每个月的最后一天运行。
任何人都可以帮助我吗?
答案 0 :(得分:2)
每天使用crontab运行并使用calendar.monthrange检查它是否是该月的最后一天:
import datetime, calendar
today = datetime.date.today()
if calendar.monthrange(today.year, today.month)[1] != today.day:
exit()
Python sched和crontab不属于同一个联盟,除非你在谈论另一个python sched。 Windows有一个类似的scheduller,或者你可以安装cygwin crontab。
如果你在一个缺乏系统范围任务调度程序的奇怪平台上,你可以留下一个运行上述测试的无限循环和time.sleep(24 * 60 * 60)秒或类似的东西。
答案 1 :(得分:1)
该月的最后一天有一个属性,即下一个日期的值小于当前日期。
了解从当天到当天结束的天数。使用上面列出的属性作为线索。使用datetime
模块查找详细信息。
编写一个函数def mydaycount():
,该函数以当前日期的0开头,并且每个后续日期都会产生更高的值。这与您的time.time()调用相似,但每天都是
写一个函数def mydaydelay(num):它会睡一天。
现在,重要的部分是
class sched.scheduler(timefunc, delayfunc)
timefunc可以是任何函数,当被调用时返回一个值,在你的情况下,它将是mydaycount
,delayfunc将是mydaydelay
。
然后你可以使用行动作为你的行动作为你的行动作为你的行动作为你的行动作为你的行动的日期来调用被调查的对象。
scheduler.enterabs(time, priority, action, argument)
您的计划的粗略轮廓将是这样的。
import sched
import datetime
def mydaycount():
yield int_days
def mydaydelay(n):
sleep_for_days(n)
scheduler = sched.scheduler(mydaycount, mydaydelay)
def print_event(name):
print 'EVENT:', name
n_days_to_last_day = 3 # This should be your calculate value
scheduler.entertabs(n_days_to_last_day, 1, print_event, ('last day',))
scheduler.run()