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

2024-04-26 00:05:37 发布

您现在位置:Python中文网/ 问答频道 /正文

目前,我有一个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

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

提前谢谢,一定会投赞成票/接受回答


Tags: theimport脚本truedatetimeiftimemain
3条回答

^{}是此工作的正确工具。
要在每天12:00执行的mac上创建job,请打开终端并键入:

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

CTRL+OCTRL+X以保存并退出。


注意:

1-A job按以下格式指定:

          • 要执行的命令 │ │ │ │ │ 一周中的某一天(0-6)(0到6是星期日到星期六,或使用名称;7是星期日,与0相同) 个月(1-12) 月(1-31)日 时(0-23) —————————————————————————分(0-59)

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

相关问题 更多 >