杰瑞科技汇

Windows如何定时自动运行Python脚本?

  1. 任务计划程序:最传统、最官方、功能最强大的方法。
  2. Python 第三方库 schedule:如果你想在 Python 脚本内部实现定时逻辑,而不依赖外部系统。
  3. Python 第三方库 apscheduler:功能更强大、更专业的定时任务库,适合复杂的调度需求。

使用 Windows 任务计划程序(推荐)

这是 Windows 系统自带的功能,最稳定,也最灵活,它可以在指定时间、系统启动、用户登录等多种事件下触发程序。

Windows如何定时自动运行Python脚本?-图1
(图片来源网络,侵删)

优点:

  • 系统级原生支持:不依赖 Python 环境,只要系统能运行脚本即可。
  • 功能强大:支持复杂的触发器(每天、每周、每月、事件触发等)、条件判断(系统空闲、电源状态等)和操作设置。
  • 可靠性高:由系统核心管理,不易被误关闭或干扰。
  • 可视化界面:图形操作,简单直观。

缺点:

  • 需要在系统层面进行配置,而不是在代码中。

详细步骤:

第1步:编写你的 Python 脚本

确保你的 Python 脚本是可独立运行的,一个简单的示例脚本 my_task.py

# my_task.py
import datetime
import os
# 获取当前时间,用于记录日志
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(f"任务在 {now} 开始执行!")
# --- 在这里编写你的主要任务代码 ---
# 读取一个文件,写入数据,调用API等
try:
    # 假设我们想在 D 盘根目录创建一个日志文件
    log_file_path = "D:\\my_log.txt"
    with open(log_file_path, "a", encoding="utf-8") as f:
        f.write(f"任务成功执行于: {now}\n")
    print("任务执行完毕,日志已写入。")
except Exception as e:
    print(f"任务执行出错: {e}")

第2步:打开任务计划程序

  • Win + S 键,搜索“任务计划程序”,然后打开它。

第3步:创建基本任务

Windows如何定时自动运行Python脚本?-图2
(图片来源网络,侵删)
  1. 在右侧的“操作”面板中,点击“创建基本任务...”。

  2. 创建任务向导会弹出。

    • 名称:给你的任务起一个有意义的名字,MyPythonScriptTask
    • 描述:可以简单描述一下这个任务是做什么的。
    • 点击“下一步”。

第4步:设置触发器

  • 选择任务开始执行的时间点,我们选择“每天”作为示例。
  • 点击“下一步”。
  • 设置具体的时间,开始时间”设为 22:00,并勾选“每天”。
  • 点击“下一步”。

第5步:设置操作

Windows如何定时自动运行Python脚本?-图3
(图片来源网络,侵删)
  • 选择要执行的操作,我们选择“启动程序”。
  • 点击“下一步”。
  • 重要:配置要启动的程序
    • 程序或脚本:这里需要填写 python.exe 的完整路径。
      • 如何找到 python.exe 的路径?在命令提示符中输入 where python,它会显示 Python 的安装路径。C:\Users\YourUser\AppData\Local\Programs\Python\Python311\python.exe
      • 或者,你可以直接使用 py.exe,这是 Python 官方推荐的启动器,通常在环境变量中,这样更通用,不会因为 Python 版本不同而修改任务。
    • 添加参数(可选):这里填写你的 Python 脚本的路径。D:\path\to\your\script\my_task.py
    • 起始于(可选):这里填写你的 Python 脚本所在的目录。D:\path\to\your\script强烈建议填写,这可以避免脚本中因相对路径找不到文件而出错。
    • 点击“下一步”。

第6步:完成创建

  • 确认信息无误后,点击“完成”。

第7步:高级设置(可选但推荐)

  • 在任务计划程序库中,找到你刚刚创建的任务 MyPythonScriptTask
  • 右键点击,选择“属性”。
  • 在“常规”选项卡中:
    • 勾选“不管用户是否登录都要运行”:这样即使你注销或重启电脑,任务也会在后台执行。
    • 勾选“使用最高权限运行”:可以避免因权限不足导致脚本失败。
  • 在“操作”选项卡中,确保你的程序和参数都正确无误。
  • 在“条件”和“设置”选项卡中,你可以进行更细致的配置,例如只有在电脑使用交流电源时才运行等。

第8步:测试

  • 右键点击你的任务,选择“运行”,如果一切正常,你应该能看到命令行窗口一闪而过,D:\my_log.txt 文件被成功创建和写入。

使用 Python 第三方库 schedule

这种方法将定时逻辑完全放在 Python 代码内部,适合简单的、轻量级的定时任务。

优点:

  • 代码内控制:所有逻辑都在一个文件中,易于部署和移植。
  • 简单易用:API 设计非常简洁。

缺点:

  • 需要程序持续运行:脚本必须一直运行才能触发下一次任务,如果脚本崩溃或关闭,定时任务就停止了。
  • 不依赖系统:无法实现“开机自启”或“用户注销后运行”等系统级功能。

使用步骤:

第1步:安装 schedule

pip install schedule

第2步:编写脚本

# schedule_task.py
import schedule
import time
import datetime
import os
def job():
    """这是你要定时执行的任务函数"""
    now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    print(f"任务在 {now} 开始执行!")
    try:
        log_file_path = "D:\\my_log_schedule.txt"
        with open(log_file_path, "a", encoding="utf-8") as f:
            f.write(f"任务成功执行于: {now}\n")
        print("任务执行完毕,日志已写入。")
    except Exception as e:
        print(f"任务执行出错: {e}")
# --- 设置定时规则 ---
# 每隔10分钟执行一次
# schedule.every(10).minutes.do(job)
# 每小时执行一次
# schedule.every().hour.do(job)
# 每天上午10点30分执行
# schedule.every().day.at("10:30").do(job)
# 每周一上午执行
# schedule.every().monday.do(job)
# 每周三和周五的下午5点执行
# schedule.every().wednesday.at("17:00").do(job)
# schedule.every().friday.at("17:00").do(job)
# 为了演示,我们每5秒执行一次
schedule.every(5).seconds.do(job)
print("定时任务已启动,脚本将一直运行...")
print("按 Ctrl+C 停止。")
# --- 保持脚本运行 ---
while True:
    # 检查并执行到期的任务
    schedule.run_pending()
    # 暂停1秒,避免CPU占用过高
    time.sleep(1)

如何运行? 直接运行这个 Python 脚本,它就会进入一个无限循环,每隔5秒(根据你的设置)调用一次 job 函数。注意:关闭这个命令行窗口,任务就会停止。


使用 Python 第三方库 APScheduler

APScheduler (Advanced Python Scheduler) 是一个功能更全面的定时任务库,比 schedule 更强大、更灵活。

优点:

  • 功能强大:支持基于日期、时间间隔(cron-like)、固定时间间隔等多种调度类型。
  • 持久化:可以将任务状态保存到数据库,重启后可以恢复。
  • 异步支持:可以很好地与 asyncioTwistedTornado 等异步框架集成。
  • 分布式:可以构建分布式任务队列。

缺点:

  • API 比 schedule 复杂一些。

使用步骤:

第1步:安装 APScheduler

pip install apscheduler

第2步:编写脚本

# apscheduler_task.py
from apscheduler.schedulers.blocking import BlockingScheduler
from datetime import datetime
import os
def my_job():
    """这是你要定时执行的任务函数"""
    now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    print(f"APScheduler 任务在 {now} 开始执行!")
    try:
        log_file_path = "D:\\my_log_apscheduler.txt"
        with open(log_file_path, "a", encoding="utf-8") as f:
            f.write(f"任务成功执行于: {now}\n")
        print("任务执行完毕,日志已写入。")
    except Exception as e:
        print(f"任务执行出错: {e}")
# 创建一个阻塞式调度器
scheduler = BlockingScheduler()
# --- 添加定时任务 ---
# 1. 每隔30秒执行一次
# scheduler.add_job(my_job, 'interval', seconds=30)
# 2. 每天 22:00 执行
# scheduler.add_job(my_job, 'cron', hour=22, minute=0)
# 3. 每周一、周三、周五的 9:30 执行
# scheduler.add_job(my_job, 'cron', day_of_week='mon,wed,fri', hour=9, minute=30)
# 4. 在 2025-12-31 23:59:59 这个特定时间点执行一次
# scheduler.add_job(my_job, 'date', run_date=datetime(2025, 12, 31, 23, 59, 59))
# 为了演示,我们每10秒执行一次
scheduler.add_job(my_job, 'interval', seconds=10)
print("APScheduler 定时任务已启动...")
print("按 Ctrl+C 停止。")
# 启动调度器,它会一直运行直到被手动停止
try:
    scheduler.start()
except (KeyboardInterrupt, SystemExit):
    print("调度器已停止。")

如何运行? 与方法二类似,直接运行此脚本即可。BlockingScheduler 会阻塞主线程,保持脚本运行。


总结与对比

特性 Windows 任务计划程序 Python schedule Python APScheduler
可靠性 极高,系统级管理 一般,依赖脚本进程存活 ,可配置为守护进程
功能 最强大,支持各种系统事件 简单,基本定时 非常强大,支持 cron、异步、持久化
易用性 图形界面,配置稍复杂 最简单,几行代码 中等,API 比schedule复杂
独立性 完全独立,脚本无需修改 脚本必须持续运行 脚本必须持续运行
适用场景 生产环境、关键任务、需开机自启 快速原型、简单的个人脚本 复杂应用、Web服务、需要高级调度
推荐指数 ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐

如何选择?

  • 如果你想在 Windows 系统上稳定、可靠地运行一个定时任务,特别是需要长期无人值守运行请毫不犹豫地选择方法一:任务计划程序,这是最专业、最推荐的方式。
  • 如果你只是想在开发或测试中快速实现一个简单的定时功能,或者你的应用本身就是一个持续运行的服务(如 Flask/Django 应用),那么方法二或方法三会非常方便。APScheduler 功能更全面,适合构建复杂的应用。
分享:
扫描分享到社交APP
上一篇
下一篇