如何使用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
相关产品推荐
相关产品推荐

