[英]Run Function Every "X" hours for "X" Seconds over 24 hours
I need to make a system where the user can set a timer that goes off every x hours for x minutes (ideally starting from 0600 or at least on the 00 seconds of the actual time) over 24 hours我需要制作一个系统,用户可以在其中设置一个计时器,该计时器在 24 小时内每 x 小时关闭一次,持续 x 分钟(理想情况下从 0600 开始或至少在实际时间的 00 秒开始)
below is an example of the code i am trying to do, the problem is when it hits 00:00 (midnight) it goes back to being not ready.下面是我正在尝试执行的代码示例,问题是当它到达 00:00(午夜)时,它又回到了没有准备好的状态。
import time
import argparse
from datetime import datetime
def main(start_time_hour, start_time_minute, watering_duration,
watering_interval_hour, watering_interval_minute):
# Watering loop, each cycle consists one application of water per watering
cycle.
while True:
# Sleep until start time is reached. Resets every 24 hours.
current_time = datetime.now()
while current_time.hour < start_time_hour: # This loop will only break after start hour is reached,
time.sleep(1) # at which point it will only pass for remainder of 24h
current_time = datetime.now()
print('Not Ready - Hour')
while current_time.minute < start_time_minute: # This loop will only break after start minute is reached,
time.sleep(1) # at which point the watering routine will execute for
current_time = datetime.now() # the remainder of the 24 hour period
print('Not Ready - minute')
while current_time.hour <= start_time_hour and current_time.minute < start_time_minute: # This loop will only break after start hour is reached,
time.sleep(1) # at which point it will only pass for remainder of 24h
current_time = datetime.now()
print('Not Ready - minute')
# Commence watering loop
print("call function to turn sprinkler valve relay ON here")
print('On time:', datetime.now().time().strftime('%H:%M:%S'))
time.sleep(watering_duration)
print("call function to turn sprinkler valve relay OFF here")
print('Off time:', datetime.now().time().strftime('%H:%M:%S'))
time.sleep(watering_interval_hour * 3600 + watering_interval_minute * 60 - watering_duration)
if __name__ == '__main__':
parser = argparse.ArgumentParser(description="Watering timer code. Takes user input args and prints events to stdout")
parser.add_argument('start_time', metavar='start_time %s', help='start time in HHMM format with leading zeroes')
parser.add_argument('watering_duration', metavar='watering_duration %s', help='watering duration in seconds')
parser.add_argument('watering_interval', metavar='watering_interval %s', help='watering interval in HHMM format with leading zeroes')
args = parser.parse_args()
main(int(args.start_time[0:2]), int(args.start_time[2:4]), int(args.watering_duration),
int(args.watering_interval[0:2]), int(args.watering_interval[2:4]))
Thanks in Advance!提前致谢!
Linux crontab is a good option for the automated scheduler Job. Linux crontab是自动调度程序作业的不错选择。 The crontab is a list of commands that you want to run on a regular schedule, and also the user-defined functions/program it will be executed within the regular interval of time.
crontab 是您希望定期运行的命令列表,以及将在固定时间间隔内执行的用户定义的函数/程序。
Usage:用法:
MIN HOUR DOM MON DOW CMD MIN HOUR DOM MON DOW CMD
* * * * * /usr/local/bin/action-trigger.sh
MIN : Minute field 0 to 59 MIN : 分钟字段 0 到 59
HOUR : Hour field 0 to 23 HOUR : 小时字段 0 到 23
DOM : Day of Month 1-31 DOM : 月 1-31 日
MON : Month field 1-12 MON : 月份字段 1-12
DOW : Day Of Week 0-6 DOW : 星期几 0-6
CMD : Command Any command to be executed CMD : Command 要执行的任何命令
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.