如何在一天中的特定时间打印某些内容

时间:2017-01-14 04:11:04

标签: python datetime if-statement

是否可以让python 2.7在一天中的特定时间打印。例如,如果我在15:06运行程序并将其编码为在15:07打印“立即执行任务”,则会打印出来。所以无论你在15:07点击它的时候运行该程序,它都会打印出“现在就完成任务”。此外,此时可以每周打印一次吗?

3 个答案:

答案 0 :(得分:4)

如果你能够,我会建议安装图书馆时间表。

使用pip install schedule

如果使用时间表,您的代码将如下所示:

import schedule
import time

def task():
    print("Do task now")

schedule.every().day.at("15:07").do(task)

while True:
    schedule.run_pending()
    time.sleep(1)

如果间隔时间过长,您可以根据需要调整time.sleep(1)以使其睡眠时间更长。这是schedule library page

答案 1 :(得分:1)

虽然python不适合安排一些事情;那里有更好的工具。然而,如果希望在下面的 python 中实现这一点,那么实现它是一种方法:

上午11点的 scheduled_time 打印:

import datetime as dt
scheduled_time = dt.time(11,00,00,0)
while 1==1:
    if (scheduled_time < dt.datetime.now().time() and 
       scheduled_time > (dt.datetime.now()- dt.timedelta(seconds=59)).time() ):
        print "Now is the time to print"
        break
  

有两个if conditions打算在一分钟内打印;可以选择较短的持续时间。但break之后的print确保print仅执行一次。

您需要对此进行推断,以便代码在几天内运行。

参考:datetime Documentation

答案 2 :(得分:1)

如果您没有使用cron,那么一般的解决方案是找到剩余的时间,直到您需要事件发生,让程序休眠一段时间,然后继续执行。

棘手的部分是让程序找到给定时间的下一次出现。这里有一些模块,但您也可以使用普通代码来完成一个定义明确的情况,它只是一天中的固定时间。

import time

target_time = '15:07:00'
current_epoch = time.time()

# get string of full time and split it
time_parts = time.ctime().split(' ')
# replace the time component to your target
time_parts[3] = target_time
# convert to epoch
future_time = time.mktime(time.strptime(' '.join(time_parts)))

# if not in the future, add a day to make it tomorrow
diff = future_time - current_epoch
if diff < 0:
    diff += 86400

time.sleep(diff)
print 'Done waiting, lets get to work'