You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用APScheduler运行Python脚本?配置每日定时任务执行同级目录脚本的问题咨询

如何用APScheduler每天定时执行同目录下的另一个Python脚本?

我希望实现脚本自动化,使其每天下午5点自动运行。我编写了一个Python文件,代码如下:

from apscheduler.schedulers.blocking import BlockingScheduler
sched = BlockingScheduler()
@sched.scheduled_job('cron', day_of_week='mon-sun', hour=17)
def scheduled_job():
    print('This job is run everyday at 5:00 p.m.')
sched.configure(options_from_ini_file)
sched.start()

目前这段代码似乎可以正常运行,但我需要它实际执行与调度文件处于同一目录下的另一个脚本。请问我的配置是否存在问题?


首先说你现有代码里的小问题:options_from_ini_file这个变量完全没定义,如果没有自定义的INI配置需求,直接删掉sched.configure()这一行就好;如果确实需要用配置文件,得先通过ConfigParser加载它,或者用sched.configure(config_file='你的配置文件名.ini')来指定路径。

接下来重点解决「执行同目录另一个脚本」的需求,给你两种常用的可靠方案:

方案1:导入目标脚本并调用核心函数

如果你的目标脚本(比如叫task_script.py)是用函数封装了业务逻辑,这是最简洁的方式:

from apscheduler.schedulers.blocking import BlockingScheduler
# 导入同目录的目标脚本
import task_script

sched = BlockingScheduler()

@sched.scheduled_job('cron', day_of_week='mon-sun', hour=17)
def scheduled_job():
    print('This job is run everyday at 5:00 p.m.')
    # 调用目标脚本里的核心函数,比如假设逻辑都在run_task()里
    task_script.run_task()

# 去掉未定义的configure行,或补充配置加载逻辑
sched.start()

⚠️ 注意:如果目标脚本里有直接执行的代码(没有用if __name__ == "__main__":包裹),导入时就会立刻运行,所以建议把目标脚本的核心逻辑都放到函数里,用入口判断包裹直接执行的代码。

方案2:用subprocess独立运行整个脚本

如果目标脚本是完全独立的程序,或者你想让它在单独的进程里运行,用subprocess模块模拟命令行执行:

from apscheduler.schedulers.blocking import BlockingScheduler
import subprocess
import sys

sched = BlockingScheduler()

@sched.scheduled_job('cron', day_of_week='mon-sun', hour=17)
def scheduled_job():
    print('This job is run everyday at 5:00 p.m.')
    # 用当前Python解释器执行同目录下的task_script.py
    subprocess.run([sys.executable, './task_script.py'], check=True)

sched.start()

这种方式和你手动在命令行敲python task_script.py效果完全一样,两个脚本的运行环境完全隔离。

最后再确认下调度配置:你的cron表达式day_of_week='mon-sun', hour=17是正确的,确实会每天下午5点触发任务。

内容的提问来源于stack exchange,提问作者1Legend

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 03:17:46