python-如何安排函数在每个月的最后一天运行?

python-如何安排函数在每个月的最后一天运行?,python,Python,我想使用pythonsched安排函数在每个月的最后一天运行 有人能帮我做同样的事情吗?使用crontab每天运行,并使用calendar检查这是否是一个月的最后一天。monthrange: import datetime, calendar today = datetime.date.today() if calendar.monthrange(today.year, today.month)[1] != today.day: exit() Python和crontab不在同

我想使用pythonsched安排函数在每个月的最后一天运行


有人能帮我做同样的事情吗?

使用crontab每天运行,并使用calendar检查这是否是一个月的最后一天。monthrange:

 import datetime, calendar
 today = datetime.date.today()
 if calendar.monthrange(today.year, today.month)[1] != today.day:
     exit()
Python和crontab不在同一个联盟中,除非您讨论的是另一个Python sched。Windows有一个类似的调度程序,或者您可以在crontab中安装cygwin


如果您在某个缺乏系统范围任务调度程序的奇怪平台上,您可以留下一个无限循环来运行上述测试和时间。睡眠(24*60*60)秒或类似的时间。一个月的最后一天有一个属性,即下一天的值小于当前值

找出从今天到一天结束有多少天。使用上面列出的属性作为线索。使用
datetime
模块查找详细信息

  • 编写一个函数
    def mydaycount():
    ,该函数在当天以0开头,并在随后的每一天生成一个更高的值。这类似于您的time.time()调用,但适用于每一天

  • 编写一个函数def mydaydelay(num):它将睡眠一天

  • 现在,这里重要的部分是

    class sched.scheduler(timefunc, delayfunc)
    
    timefunc可以是调用时返回值的任何函数,在您的情况下,它将是
    mydaycount
    ,delayfunc将是
    mydaydelay

    然后,您可以调用计划对象,该对象的天数为月底,action为您的action为您的函数

    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()
    

    也许像cron这样的东西更符合您的需要。sched像cron一样用于调度。您可以使用特定于操作系统的任务调度器,并将其配置为运行包含函数的Python脚本。如何做前者将取决于您的操作系统和正在使用的任务调度程序。
    sched
    模块不是为做这类事情而设计的。cron on*nix和AT或windows上的GUI任务调度器可能重复如果您需要一个特定于操作系统的调度器(如cron)每天调度一次,为什么不使用调度器每月调度一次呢?@Tomas:AFAIK,标准crontab缺少在每月最后一天运行的语法。在第一天0:00h跑步很容易,这几乎和在最后一天23:59:59.9999h跑步一样。日历。monthrange()会给你一个月的最后一天,看。@Paulo:谢谢你的提示。monthrange()可能会给出直接值,但上面提到的东西肯定可以使用calendar模块轻松计算。