使用Datetime在特定时间运行Python

时间:2014-11-10 00:32:45

标签: python python-2.7

我想每天早上8点执行脚本的一部分。我创建了一个简化的测试用例,它没有语法错误,但无法正常工作。我想这可能是因为我的if语句将时间用作字符串,但它不会以任何其他方式编译。我做错了什么?

import datetime

while True:
    if datetime.datetime.now().time()  == "19:00:00.000000":
        print "it's time!"

1 个答案:

答案 0 :(得分:2)

如果您使用cron的系统,那么最好设置一个cron作业。但是,您的问题可以从Python中解决:

首先,如您所述,datetime.datetime.now().time()返回datetime.time个对象,而不是字符串:

In [89]: datetime.datetime.now().time()
Out[89]: datetime.time(19, 36, 13, 388625)

此外,虽然会datetime.datetime.now().time() == datetime.time(19, 0) 有效的Python,恰好在恰当的位置执行time()的可能性 由于datetime.datetime.now()具有微秒,所以时刻很小 解析度。因此,最好测试当前时间是否在某些范围内 范围。

但是,由于您只想每天运行一次该函数,因此您可以测量从现在到运行该函数的时间以及休眠该秒数的总秒数:

import datetime as DT
import time

while True:
    now = DT.datetime.now()
    target = DT.datetime.combine(DT.date.today(), DT.time(hour=8))
    if target < now:
        target += DT.timedelta(days=1)

    time.sleep((target-now).total_seconds())
    # do something