在特定时间启动和停止 Python 脚本

Start and stop a Python script at a specific time

我正在写一个脚本,每天在某个时间段记录用户activity。这些句点取自 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 的示例。但这对我没有任何作用,因为我只想在特定时间启动脚本并在特定时间停止。然后,在下一个 "shift" 到来时再次 运行。

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))

如果我理解你的问题,你可以使用 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 小时,即使它还没有完成,仍然停止程序.在这种情况下,您可以使用 while loop

先看看我的脚本,这可能会有帮助

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 下午运行我的程序,如果通过 10:00 下午,程序将在文本日的开始运行。

如果您想 运行 您的脚本以 特定的时间间隔 ,我会建议您在下面使用我自己的脚本中的代码。实施起来非常简单。

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 点。更重要的是,您必须在循环中持续获取当前时间。

如果您在脑海中有一个特定的日子,请将您当前的一天排除在外并将其与您的获得价值进行比较!!对我有用。