【问题标题】:Running a python script at set intervals以设定的时间间隔运行 python 脚本
【发布时间】:2020-12-13 10:45:53
【问题描述】:

我们的想法是让这个脚本从上午 9 点运行到下午 6 点。

我想在每分钟结束前 10 秒运行脚本“一次”。 意思是 9:01:50,9:02:50,9:03:50 等等......直到 5:59:50

这是我的代码

from datetime import datetime, time, timedelta, date
import time


i = 0
while i <= 1:
    t = datetime.now()
    my_time = t.strftime("%H:%M:%S.%f")

    if t.second  >=50:
        print("my local time is", my_time)

        tt = datetime.now()
        time.sleep(55)
        print("after sleep print time is", tt)

现在,如果我决定在半小时内只运行一次这个脚本,那么我会在中午使用一次

if t.minute == 29 and t.second >=50:
   print("my local time is", my_time)
elseif t.minute == 59 and t.second >=50):
   print("my local time is", my_time)

问题开始于我在白天反复改变主意并决定每 4 分钟运行一次脚本,或者假设 6 分钟保持起点为上午 9 点,终点为下午 6 点。

有什么方法可以在脚本的开头设置一个变量,这样我需要做的就是更改该变量并重新启动脚本,以便它在此后以设定的时间间隔完成工作。 所以在上午 9 点 37 分,我将变量更改为 5 ... 其中 5 是分钟。 那么脚本将在 9:39:50、9:44:50、9:49:50 等运行...

在 10:04,我将变量更改为 15,脚本将在 10:14:50 进行第一次打印……下一次在 10:29:50 打印,依此类推……

如何做到这一点? 提前致谢。

【问题讨论】:

  • 如果您在 Linux 或 MacOS 上运行,您知道cron/crontab吗?
  • 我在 Windows 机器上。并不是我想单独运行这个脚本。这是一个函数。
  • @J-Jillu 查看计划任务:stackoverflow.com/questions/7195503/…

标签: python


【解决方案1】:

当然,cron 作业最适合您的要求。但是,如果您愿意,可以尝试定义一个函数并传递一个变量:

from datetime import datetime, time, timedelta, date
import time

def myfunction(interval=1):
    i = 0
    minut_to_run =[] 
    minutes = 59
    while minutes >= 0:
       minut_to_run.append(minutes)
       minutes -= interval

    while i <= 1:
       t = datetime.now()
       my_time = t.strftime("%H:%M:%S.%f")

       if t.second >= 50 and t.minute in minut_to_run:
           print("my local time is", my_time)
           time.sleep(55)
           print("after sleep print time is", t)

interval_in_minut = 6
myfunction(interval=interval_in_minut)

【讨论】:

  • 我忘记了一个 e 到 .minute。我纠正了它,它似乎工作。
【解决方案2】:

您可能想要schedule 模块:https://github.com/dbader/schedule

import schedule
import datetime

def job():
    print("I'm working...")

def office_hours():
    d = datetime.datetime.now()
    return (d.hour > 8) and (d.hour < 18)

interval = 10  # minutes
schedule.every(interval).minutes.at(":50").do(job)

while True:
    if office_hours():
      schedule.run_pending()
      time.sleep(1)
    else:
      time.sleep(60)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 2013-08-04
    • 2012-04-04
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多