自动化小时级邮件重复打印初始时间问题排查求助
问题:自动化任务中始终打印首次运行的时间,无法获取实时时间?
你遇到的问题很典型——你的代码里日期和时间变量只在程序启动时计算了一次,之后每次调用Action函数都是复用这个初始值,自然不会更新。
问题出在哪?
看你的代码片段:
# 这两行在全局作用域,程序启动时就计算好了,之后不会再更新 crntDte = today.strftime("%m/%d/%Y") crntTime = datetime.now(central).strftime('%H:%M') def Action(): # 这里直接调用全局变量的固定值,不会重新获取当前时间 print('Process started at '+ crntDte + " " + crntTime)
crntDte看起来正常只是因为你测试时还没跨天,要是程序运行到第二天,日期也会停留在第一天的数值。而时间每小时都在变化,所以问题立刻就暴露了。
怎么修复?
把获取当前日期和时间的逻辑移到Action函数内部,这样每次执行任务时都会重新计算实时时间。另外你的代码还漏了import schedule,这个也得补上,否则会直接报错。
修改后的完整代码:
import pytz from datetime import datetime import time import schedule # 补上缺失的schedule库导入 central = pytz.timezone('US/Central') def Action(): # 每次执行Action时,重新获取当前的日期和时间 today = datetime.now(central) crntDte = today.strftime("%m/%d/%Y") crntTime = today.strftime('%H:%M') print('Process started at '+ crntDte + " " + crntTime) schedule.every(2).minutes.do(Action) while True: schedule.run_pending() time.sleep(1)
另外,原代码里utc = timezone('UTC')这行没有被用到,可以直接删掉,减少冗余代码。
内容的提问来源于stack exchange,提问作者Raghul
相关产品推荐
相关产品推荐

