如何让python 脚本在指定的时间内运行,如在10点,让一个python脚本自动跑

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何让python 脚本在指定的时间内运行,如在10点,让一个python脚本自动跑相关的知识,希望对你有一定的参考价值。

噢,这个不是python擅长的,你应该去百度搜一下linux命令crontab的用法,一分钟就能明白如何设置一个定时运行任务。

如果你想写一个程序,用python完成一个crontab类似的功能,那么请看《UNIX环境高级编程》第13章,但弄懂这个是要花一点时间了。
参考技术A linux下用crontab
windows下用定时任务
参考技术B 最简单的:
写一个python脚本
加一个死循环,判断时间。
如果到了指定的时间,就运行一次,然后在进入死循环。
当然不是要你真搞个死循环占用CPU,你可以用sleep函数。不占用CPU。
每次sleep 10s。。
加个启动项,每次开机启动这个脚本就行了。
参考技术C 计划任务

Python:如何自动化脚本以每天在特定时间运行?

【中文标题】Python:如何自动化脚本以每天在特定时间运行?【英文标题】:Python: How to automate script to run every day at specific time? 【发布时间】:2017-09-25 21:35:18 【问题描述】:

目前,我有一个 python 脚本,它只会在到达指定的日期/时间后启动,除非我重新指定日期/时间,否则永远不会再次运行:

import datetime, time

start_time = datetime.datetime(2017, 4, 27, 19, 0, 0)

while(True):
    dtn = datetime.datetime.now()

    if dtn >= start_time:
       # Runs the main code once it hits the start_time

但是我怎样才能让它每天只在指定的时间运行代码呢?

提前谢谢你,一定会支持/接受答案

【问题讨论】:

为什么不是cronjob (linux) 或Task Scheduler (windows)? @PedroLobito 使用 Mac。您介意显示为答案,以便我也可以投票/接受答案吗? 答案已发布,GL! 【参考方案1】:

cronjob 是完成这项工作的正确工具。 要在每天 12:00 执行的 mac 上创建 job,请打开终端并输入:

env EDITOR=nano crontab -e
0 12 * * *  /full/path/to/python /full/path/to/script.py

CTRL+OCTRL+X 保存并退出。


注意事项:

1 - job 按以下格式指定:

2 - 要查看您的活动 crontab 作业列表,请使用以下命令:

crontab -l

提示:

在工作日凌晨 1 点执行:

0 1 * * 1-5 /full/path/to/python /full/path/to/script.py

每 10 分钟执行一次:

*/10 * * * * /full/path/to/python /full/path/to/script.py

日志输出到文件:

*/10 * * * * /full/path/to/python /full/path/to/script.py >> /var/log/script_output.log 2>&1

注意:

crontab.guru 是一个了解 cronjobs 的好网站

【讨论】:

如果我将 Python 添加到我的 PATH 变量中,我真的需要我的 python 完整路径还是只需要 python 如果已经在PATH上就不需要python完整路径了,我只是为新用户玩安全。【参考方案2】:

一旦您确定当前时间已超过开始时间,请使用 datetime.timedelta 对象将开始时间增加所需的时间间隔。

import datetime
import time

next_start = datetime.datetime(2017, 4, 27, 19, 0, 0)
while True:
    dtn = datetime.datetime.now()

    if dtn >= next_start:
        next_start += datetime.timedelta(1)  # 1 day
        # do what needs to be done

    time.sleep(AN_APPROPRIATE_TIME)

【讨论】:

您介意解释time.sleep() 的原因吗?顺便谢谢你的回复! 在您再次致电now() 之前,这只是一个延迟。一般来说,如果dtn >= next_start 是假的,那么一毫秒后它仍然是假的。 AN_APPROPRIATE_TIME 的一个不错的值是 (next_start - datetime.datetime.now()).seconds,也就是说,在 next_time 之前休眠多少秒。【参考方案3】:

使用 Python 模块 apscheduler 可能是一种选择。

from datetime import datetime
import time
import os

from apscheduler.schedulers.background import BackgroundScheduler


def tick():
    print('Tick! The time is: %s' % datetime.now())


if __name__ == '__main__':
    scheduler = BackgroundScheduler()
    scheduler.add_job(tick, 'interval', seconds=3)
    scheduler.start()
    print('Press Ctrl+0 to exit'.format('Break' if os.name == 'nt' else 'C'))

    try:
        # This is here to simulate application activity (which keeps the main thread alive).
        while True:
            time.sleep(2)
    except (KeyboardInterrupt, SystemExit):
        # Not strictly necessary if daemonic mode is enabled but should be done if possible
        scheduler.shutdown()

【讨论】:

【参考方案4】:

你可以尝试使用python

Advanced Python Scheduler asyncio 协程在剩余时间内休眠。 this question 中有一个例子

在这两种情况下,python 解释器都必须运行,并且在等待正确的时间时可能会执行其他操作。

或者按照评论中的建议,您可以使用在您的操作系统上运行的其他服务来安排您的 python 脚本执行。

为什么不使用 cronjob (linux) 或任务计划程序 (windows)? ——佩德罗·洛比托

【讨论】:

以上是关于如何让python 脚本在指定的时间内运行,如在10点,让一个python脚本自动跑的主要内容,如果未能解决你的问题,请参考以下文章

如何让VSCode单步执行脚本内Python语句(Mac系统)

PyCharm - 我如何调试(如在 Jupyter Notebook 中)而不必每次修改代码时都重新运行完整的脚本?

如何安排生产python脚本以触发函数在每天的指定时间运行

在python脚本中运行powershell脚本,如何让python在运行时打印powershell输出

使用空格指定参数以运行 python 脚本

Python:如何自动化脚本以每天在特定时间运行?