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 无网络映射盘等用户会话资源):powershellschtasks /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"