我想在每天22:00使用导入日期时间运行以下内容。我正在尝试使用codeRan布尔值来触发它,但我无法使其工作。总是错的:
import datetime
timeNow = datetime.datetime.now() # 2022-10-31 10:23:10.461374
timeHour = timeNow.strftime("%H") # 22
timeFull = timeNow.strftime("%X") # 10:21:59
timeAMPM = timeNow.strftime("%p") # AM or PM
codeRan = False
if timeHour == "22" and codeRan == False:
print(timeHour + " That is correct!")
codeRan = True
elif timeHour == "22":
print("Script already ran. Wait 24 hours")
else:
print("Not time yet, it's only " + timeFull + ". The script will run at 22:00" + timeAMPM)
如果脚本在晚上10点到11点之间运行,您编写的代码将运行代码print(timeHour + " That is correct!")
并打印22 That is correct!
。但是,您的代码中没有包含循环,因此您需要使用一些外部方法来频繁调用脚本,以检查是否是时候运行其他脚本了。在linux中,您可以使用crontab
将其安排为每五分钟运行一次,但如果您计划这样做,您可以只使用crontab
将其安排在晚上10点运行。在windows中,也可以使用TaskScheduler。
如果你想使用python,你真的有三个选项,我可以想到(实际上可能更多(。
- 使用while循环(可能是最简单但最不优雅的解决方案,因为代码将全天候运行
while True:
{your example code here}
使用cron或TaskScheduler
使用
subprocess.call
对Python执行#2。甚至可以检查sys.platform
来确定您使用的是Linux还是Windows。检查时间,然后休眠,直到该运行代码为止。同样,这并不好,因为这意味着这个过程必须一直保持活力。
此外,虽然您的方法或比较timeNow.strftime("%H") == '22'
确实有效,但您也可以使用time.hour == 22
。
我不知道您的脚本的要求,但如果您只是想解决所提出的问题,那么缺少一个简单的while:
while not codeRan:
if timeHour == "22" and codeRan == False:
print(timeHour + " That is correct!")
codeRan = True
elif timeHour == "22":
print("Script already ran. Wait 24 hours")
else:
print("Not time yet, it's only " + timeFull + ". The script will run at 22:00" + timeAMPM)
为了防止在没有最短等待的情况下进行检查,您可以在每次迭代结束时插入睡眠:
while not codeRan:
if timeHour == "25" and codeRan == False:
print(timeHour + " That is correct!")
codeRan = True
elif timeHour == "22":
print("Script already ran. Wait 24 hours")
else:
print("Not time yet, it's only " + timeFull + ". The script will run at 22:00" + timeAMPM)
time.sleep(num_of_seconds)