如何告诉程序每天在确切的时间做某事?

时间:2015-06-22 12:24:04

标签: python windows time runtime

我正在研究将在用户计算机上运行的Python程序。该程序应尽可能在行动之间闲置(每天3次)。行动应该在早上,下午和晚上。

所以我想告诉程序它必须每天在三个特定时间运行(实例化一个类并从中做一些方法)。

我知道一种方法,但我认为这是一种矫枉过正。

while True:
    time = time.now()
    if time in [08:00 am, 12:30pm, 08:00 pm]:
        #Do what you have to do

你能告诉我这样编程的最佳方法吗?这个程序不会在我的计算机上运行,​​因此我想将所有内容作为一个组件进行管理。

编辑:马丁建议我使用cron工作。是否可以在Python代码中设置所有内容,以便我不必在客户端PC上更改任何内容?

2 个答案:

答案 0 :(得分:1)

由于您使用的是Windows,请考虑使用SCHTASKS命令:

  

安排命令和程序定期运行或在a   特定的时间。添加和删​​除计划,启动和任务   按需停止任务,并显示和更改计划任务。

您的命令应如下所示:

schtasks /create /tn <TaskName> /tr <TaskRun> /sc hourly [/mo {1 - 23}] [/st <HH:MM>] [/sd <StartDate>] [/ed <EndDate>]

/mo是重复间隔

有关完整文档,请参阅: https://technet.microsoft.com/en-ca/library/cc725744.aspx

答案 1 :(得分:0)

如果您无权访问客户端PC,您可以执行类似的操作 - 使用datetime库计算现在的时间,然后在下次需要时使用不同的时间运行程序和now,然后使用time.sleep睡眠这么多秒。当你醒来时,再次运行你想要的任何东西,然后再做相同的事情计算从现在到下次你想要运行程序的时间。

示例代码 -

from datetime import datetime
import time
while True:
    nw = datetime.now()
    nw
    >> datetime.datetime(2015, 6, 22, 17, 57, 5, 668002)
    t = datetime(nw.year,nw.month,nw.day,22,0,0,0) # this is where you calculate next time you want to run the program.
    t
    >> datetime.datetime(2015, 6, 22, 22, 0)
    td = t - nw
    td.seconds
    >> 14574
    time.sleep(14574)
    #<do your stuff>

请注意,在上面的代码中,>>表示以前语句的打印值,它们不是代码的一部分。

虽然我不确定,是否有任何副作用(不良影响)使进程长时间睡眠。

如果您可以访问客户端的PC,或者可以让他运行任务调度程序或使用unix,cronjob,请将其视为更好的选择。