发布于2026-07-14 阅读(0)
扫一扫,手机访问
在Windows环境下,定时运行Python脚本是自动化运维或数据处理中的常见需求。任务计划程序(Task Scheduler)是系统自带的利器,但很多人对“每30分钟执行一次”这类配置感到头疼——因为默认的“每小时”触发器是从启动时刻开始算间隔,没法直接落在整点和半点。下面就用一个完整的示例,一步步拆解如何实现精确到整点/半点的定时任务,并解决路径、后台运行、无人值守等实际问题。
| 项目 | 内容 |
|---|---|
| 操作系统 | Windows 11 |
| Python 解释器 | 3.11 |
| 脚本目录 | D:\Python_xx\test |
| 测试脚本 | D:\Python_xx\test\hello.py |
脚本路径:D:\Python_xx\test\hello.py,内容如下——同时输出到控制台和日志文件,每行带时间戳,方便后续验证。
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\test\hello.log", "a", encoding="utf-8") as f:
f.write(line + "\n")
log("hello word!")
打开 PowerShell 或 CMD,执行以下命令,确认脚本能正常运行:
& "D:\Python\Python311\python.exe" "D:\Python_xx\test\hello.py"
预期输出类似:
[2026-07-13 16:21:27] hello word!
同时检查 hello.log 文件,确认内容已写入。
关键点:Windows 任务计划程序的“每 1 小时”是从触发时刻起算的间隔,无法直接落在整点和半点。解决办法是创建两条任务——一条整点触发,一条半点触发。具体操作如下。
方法1:命令行(PowerShell)
schtasks /create `
/tn "PyHello_Hour" `
/tr "D:\Python\Python311\python.exe D:\Python_xx\test\hello.py" `
/sc hourly `
/st 00:00 `
/f
参数说明:/sc hourly 表示每小时执行一次,/st 00:00 指定首次触发时间为整点,这样后续每次都会在整点触发。
方法2:图形化界面(任务计划程序)
按 Win + R,输入 taskschd.msc,打开任务计划程序。右侧操作栏点击“创建任务…”。

“常规”选项卡:名称填 PyHello_Hour,其他默认。

“触发器”选项卡 → 新建:
0:00:00(对应 /st 00:00)
“操作”选项卡 → 新建:
D:\Python\Python311\python.exeD:\Python_xx\test\hello.py
“条件”和“设置”选项卡保持默认,点击“确定”完成创建。创建后,在左侧“任务计划程序库”中找到 PyHello_Hour,右键 → “运行”可立即测试。

命令行方式:
schtasks /create `
/tn "PyHello_Half" `
/tr "D:\Python\Python311\python.exe D:\Python_xx\test\hello.py" `
/sc hourly `
/st 00:30 `
/f
图形界面操作完全一样,只是任务名称改为 PyHello_Half,开始时间改为 00:30:00。
schtasks /query /tn "PyHello_Hour"
schtasks /query /tn "PyHello_Half"

schtasks /run /tn "PyHello_Hour"
schtasks /run /tn "PyHello_Half"
schtasks /delete /tn "PyHello_Hour" /f
schtasks /delete /tn "PyHello_Half" /f
任务计划程序在后台执行时,print() 输出的内容会一闪而过,无法直接观察。要验证任务是否真正执行,建议通过日志文件来确认。脚本中已经写入了日志,之后使用以下命令查看最新10行:
Get-Content "D:\Python_xx\test\hello.log" -Tail 10
如果日志中间出现了整点和半点的记录,说明任务正常工作。
默认情况下,任务只在创建它的用户登录时才会执行。如果需要在用户未登录时也能运行(比如服务器重启后自动执行),有两种方式:
/ru SYSTEM 参数,以系统身份运行(但 SYSTEM 账户没有网络映射盘等用户会话资源):schtasks /create /tn "PyHello_Hour" /tr "..." /sc hourly /st 00:00 /ru SYSTEM /f
任务计划程序的工作目录不一定是脚本所在目录。如果脚本内需要读写同目录下的文件(比如配置文件、数据文件),建议在脚本开头切换工作目录:
import os
os.chdir(os.path.dirname(os.path.abspath(__file__)))
务必使用绝对路径调用解释器(如 D:\Python\Python311\python.exe),不要直接写 python,否则任务计划程序可能找不到。
测试通过后,把 hello.py 换成你的正式业务脚本即可,定时任务无需改动。如果正式脚本路径不同,可以用 /change 命令修改任务的执行命令:
schtasks /change /tn "PyHello_Hour" /tr "D:\Python\Python311\python.exe D:\Python_xx\test\real_script.py"
schtasks /change /tn "PyHello_Half" /tr "D:\Python\Python311\python.exe D:\Python_xx\test\real_script.py"
至此,一套完整的 Windows 定时执行 Python 脚本方案就落地了。从环境配置、脚本验证到双任务实现整点/半点触发,再到后台运行、无人值守、路径问题等坑点,基本覆盖了实际使用中可能遇到的场景。接下来就可以放心地把脚本搭上自动化流水线了。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8