簡體   English   中英

在特定時間啟動和停止 Python 腳本

[英]Start and stop a Python script at a specific time

我正在編寫一個腳本,該腳本將記錄每天特定時間段內的用戶活動。 句點取自 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 schedule)以及使用 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))

如果我明白你在問什么,你可以使用 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 循環

首先看看我的腳本這可能會有所幫助

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 點。 更重要的是,您必須在循環中持續獲取當前小時。

如果您有特定的一天,請將當前日期排除在循環之外,並將其與您的獲取值進行比較!! 它對我有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM