繁体   English   中英

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

[英]Python: How to automate script to run every day at specific time?

目前,我有一个 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是这项工作的正确工具。
要在每天 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

笔记:

一旦您确定当前时间已超过开始时间,请使用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)

使用 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()

使用 python 你可以尝试

在这两种情况下,python 解释器都必须运行,并且在等待合适的时间时可能会做其他事情。

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

为什么不是 cronjob (linux) 或 Task Scheduler (windows)? — 佩德罗·洛比托

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM