我正在编写一个脚本,用于记录每天在特定时间段内的用户活动。这些时段取自API的JSON响应,如下所示:
[{"working_day": "mon", "work_start_at": "09:00", "work_end_at": "18:00"},
{"working_day": "tue", "work_start_at": "09:00", "work_end_at": "15:00"}]
假设我可以用datetime()格式解析这些字符串。 我希望相应地运行我的函数到这些句点并在" work_end_at"之后停止我的函数。我发现了很多关于如何在一定时间后运行的示例,如何每天运行(Python lib计划)和使用bash crontab的示例。但是这对我来说没什么用,因为我想要的只是在特定时间启动脚本并在特定时间停止。然后,在下一次"转移时再次运行"来了。
def start():
time_periods = working_periods_table.find_all()
today = datetime.datetime.now().isoweekday()
for day in time_periods:
if day["day"] == today:
start_time = day["work_start_at"]
end_time = day["work_end_at"]
schedule.every().week.at(start_time).do(record_activity(idle_time=300))
答案 0 :(得分:1)
如果我理解了你的要求,你可以使用while循环。让它定期检查当前时间与班次开始和结束的时间。以下是我的意思指南,但我不确定比较是否有效。
from time import sleep
def start():
time_periods = working_periods_table.find_all()
today = datetime.datetime.now().isoweekday()
for day in time_periods:
if day["day"] == today:
start_time = day["work_start_at"]
end_time = day["work_end_at"]
while True:
if datetime.datetime.now() >= start_time:
while True:
schedule.every().week.at(start_time).do(record_activity(idle_time=300))
if datetime.datetime.now() >= end_time:
break
break
else:
sleep(100)
答案 1 :(得分:0)
我有某种方法可以在特定时间启动进程,但不能在特定时间停止,我认为您可能意味着在运行1小时后,即使尚未完成,仍要停止程序。在这种情况下,您可以使用while循环
先看看我的脚本,这可能会有帮助
import time
from time import strftime, localtime
import datetime
now = datetime.datetime.now()
year = int(now.strftime("%Y"))
month = int(now.strftime("%m"))
day = int(now.strftime("%d"))
hour = int(now.strftime("%H"))
start_time_t = datetime.datetime(year=year, month=month, day=day, hour=22, minute=0, second=0)
waiting_time = time.mktime(start_time_t.timetuple()) - time.time()
if waiting_time >= 0:
print('the program will be start after ' + time.strftime("%H hours and %M minutes", time.gmtime(waiting_time)))
time.sleep(waiting_time)
else:
start_time_t = datetime.datetime(year=year, month=month, day=day + 1, hour=00, minute=0, second=0)
waiting_time = time.mktime(start_time_t.timetuple()) - time.time()
print('the program will be start after ' + time.strftime("%H hours and %M minutes", time.gmtime(waiting_time)))
time.sleep(waiting_time)
它将在每天的10:00 PM运行我的程序,如果通过10:00 PM,则该程序将在文本开始时运行。
答案 2 :(得分:0)
如果您想以特定的时间间隔运行您的脚本,我会推荐下面的代码,我在自己的脚本中使用了这些代码。实施起来如此简单。
import datetime
now = datetime.datetime.now()
print(now.year, now.month, now.day, now.hour, now.minute, now.second)
# 2015 5 6 8 53 40
while True:
now = datetime.datetime.now()
if 14 <= now.hour and 23=> now.hour:
# put your code here
请注意,在这段代码中,我考虑了下午 2 点到晚上 11 点。更重要的是,您必须在循环中持续获取当前小时。
如果您心中有特定的一天,请将当前日期排除在循环之外,并将其与您的获取值进行比较!!它对我有用。