Windows 定时执行 Python 脚本方案

Windows 定时执行 Python 脚本方案

需求:在 Windows 上从0:00开始每半小时执行一次 Python 脚本,固定落在整点(:00)和半点(:30) 。 测试脚本:hello.py


一、环境信息

项目 内容
操作系统 Windows 11
Python 解释器 3.11
脚本目录 D:\Python_xx\test
测试脚本 D:\Python_xx\test\hello.py

二、创建测试脚本

1. 创建脚本文件

脚本路径:D:\Python_xx\test\hello.py

python 复制代码
import datetime
def log(msg):
    """同时输出到控制台和日志文件,每行带时间戳"""
    line = f"[{datetime.datetime.now():%Y-%m-%d %H:%M:%S}] {msg}"
    print(line)
    with open(r"D:\Python_xx\xx\hello.log", "a", encoding="utf-8") as f:
        f.write(line + "\n")

log("hello word!")

2. 手动验证脚本可执行

powershell 复制代码
& "D:\Python\Python311\python.exe" "D:\Python_xx\xx\hello.py"

预期输出:

arduino 复制代码
[2026-07-13 16:21:27] hello word!

三、创建定时任务

Windows 任务计划程序的"每 30 分钟"是从触发时刻起算的间隔,无法直接落在整点和半点。 因此采用两条任务 :/sc hourly /st 00:00(整点)和 /sc hourly /st 00:30(半点)。

1. 创建整点任务

方法1:powershell创建

powershell 复制代码
schtasks /create `
  /tn "PyHello_Hour" `
  /tr "D:\Python\Python311\python.exe D:\Python_xx\xx\hello.py" `
  /sc hourly `
  /st 00:00 `
  /f

方法2:windows自带的图形化界面任务计划程序

按 Win + R,输入 taskschd.msc,右侧操作栏点击 "创建任务..." "常规" 选项卡:

  • 名称:PyHello_Hour, 其他默认即可,

点"触发器" 标签:

  • 开始任务:选 按计划
  • 设置:选 每天
  • 开始时间:0:00:00(对应 /st 00:00)
  • "高级设置" 区域:
    • 勾选 "重复任务间隔",右边下拉选 1 小时
    • 持续时间:选 无限期(对应命令行的每小时持续运行)

"操作" 选项卡 → 点 "新建..."

  • 操作:选 启动程序
  • 程序或脚本: - 添加参数(可选):- 点 "确定"

"条件""设置" 选项卡,默认即可,点最下方 "确定" 完成创建。 创建后,在左侧 "任务计划程序库" 里找到 PyHello_Hour,右键 → "运行" 可立即测试 hello.py 是否正常执行

2. 创建半点任务(同上)

powershell 复制代码
schtasks /create `
  /tn "PyHello_Half" `
  /tr "D:\Python\Python311\python.exe D:\Python_xx\xx\hello.py" `
  /sc hourly `
  /st 00:30 `
  /f

参数说明

  • /tn 任务名称(Task Name)
  • /tr 要执行的程序或命令(Task Run)
  • /sc 调度频率(Schedule),hourly 表示每小时
  • /st 开始时间(Start Time),决定落在 :00 还是 :30
  • /f 强制覆盖同名任务(Force)

四、验证与管理

1. 查看任务状态

powershell 复制代码
schtasks /query /tn "PyHello_Hour"
schtasks /query /tn "PyHello_Half"

2. 立即手动触发一次(测试用)

powershell 复制代码
schtasks /run /tn "PyHello_Hour"
schtasks /run /tn "PyHello_Half"

3. 删除任务

powershell 复制代码
schtasks /delete /tn "PyHello_Hour" /f
schtasks /delete /tn "PyHello_Half" /f

五、重要说明

1. 后台运行无控制台输出

任务计划程序后台执行时,print() 输出到控制台后一闪即逝,无法观察。 如需验证任务是否真正执行,可以看日志:

python 复制代码
import datetime

with open(r"D:\Python_xx\xx\hello.log", "a", encoding="utf-8") as f:
    f.write(f"{datetime.datetime.now()} hello word!\n")

之后查看日志即可确认整点/半点触发情况:

powershell 复制代码
Get-Content "D:\Python_xx\xx\hello.log" -Tail 10

2. 无人值守运行

默认情况下,任务只在创建它的用户登录时 才执行。若需要未登录时也运行:

  • 图形界面 :打开任务计划程序(taskschd.msc)→ 找到任务 → 属性 → 勾选 "不管用户是否登录都要运行",并输入用户凭据。

  • 命令行 :创建时加 /ru SYSTEM,以系统身份运行(但 SYSTEM 无网络映射盘等用户会话资源):

    powershell 复制代码
    schtasks /create /tn "PyHello_Hour" /tr "..." /sc hourly /st 00:00 /ru SYSTEM /f

3. 相对路径问题

任务计划程序的工作目录不一定是脚本所在目录。若脚本内需要读写同目录文件, 建议在脚本开头切换工作目录:

python 复制代码
import os
os.chdir(os.path.dirname(os.path.abspath(__file__)))

4. Python 解释器路径

务必使用绝对路径 调用解释器(D:\Python\Python311\python.exe), 不要直接写 python,以免任务计划程序找不到。


六、后续:替换为正式脚本

测试通过后,把 hello.py 换成你的正式业务脚本即可,定时任务无需改动。 若正式脚本路径不同,用 /change 修改任务的执行命令:

powershell 复制代码
schtasks /change /tn "PyHello_Hour" /tr "D:\Python\Python311\python.exe D:\Python_xx\xx\real_script.py"
schtasks /change /tn "PyHello_Half" /tr "D:\Python\Python311\python.exe D:\Python_xx\xx\real_script.py"
相关推荐
lancyu几秒前
关于多轮对话机器人的上下文Token优化和解决方案
人工智能·python·深度学习·机器学习·chatgpt·机器人·prompt
草莓橙子碗30 分钟前
Claude 使用指南
开发语言·python
工具分享39 分钟前
陪跑跟品爆单AI选品助手,高效跟品会赔本吗?
人工智能·python
COOLMO研究AI1 小时前
Python 如何实现 AI API 的提示词(Prompt)版本管理与热更新
人工智能·python·prompt
老郑聊AI业财智造1 小时前
Transformer 技术架构与源码分析
人工智能·python·深度学习·语言模型·架构·transformer·软件工程
程序员三藏1 小时前
自动化测试用例编写详解
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
230万光年的思念2 小时前
分子动力学模拟参考文献
python
HongXu_CaiYi2 小时前
0103-python相关-函数、文件
python
vortex53 小时前
从Conda到UV:Python项目依赖管理的现代演进
python·conda·uv
何以解忧,唯有..4 小时前
Python time 模块详解:时间处理与日期操作指南
开发语言·python