最稳定方案是用Windows任务计划程序+pythonw.exe+绝对路径脚本;必须用绝对路径因系统服务上下文不加载PATH,python命令会报错;pythonw.exe避免黑窗;虚拟环境需指向其Scripts目录下的pythonw.exe;“程序和脚本”填exe路径,“添加参数”仅填脚本名,“起始于”填脚本所在绝对目录;高频调度须用“创建任务”设重复间隔;需指定有权限账户并勾选“最高权限运行”。

直接上结论:用 Windows 任务计划程序 + pythonw.exe + 绝对路径脚本,是最稳定、最易排查的方案;别依赖环境变量,也别用 python.exe 弹黑窗。
为什么不能只写 python 而必须用绝对路径?
任务计划程序默认以系统服务上下文运行,不加载用户登录时的 PATHEXT 或 PATH,python 命令大概率找不到。哪怕你本地 CMD 能运行,计划任务里照样报错 'python' is not recognized as an internal or external command。
- 正确做法:右键你的 Python 快捷方式 → 属性 → 复制“目标”栏完整路径,例如
C:\Users\Administrator\AppData\Local\Programs\Python\Python39\pythonw.exe - 务必用
pythonw.exe(不是python.exe),避免每次触发都弹出 CMD 黑窗并可能被意外关闭 - 如果用了虚拟环境,路径要指向该环境下的
pythonw.exe,比如D:\venv\Scripts\pythonw.exe
参数和“起始于”填错会导致脚本静默失败
很多人把脚本路径误填进“程序和脚本”,结果任务看似运行成功,但实际什么都没执行——因为系统试图把 main.py 当成可执行程序去启动。
- “程序和脚本”:填
pythonw.exe的绝对路径(如上) - “添加参数”:只填脚本文件名(如
news_crawler.py),不要带路径,也不要加.py以外的扩展名 - “起始于”:填脚本所在目录的**绝对路径**(如
D:\py\crawler),这是关键——os.getcwd()和相对路径读写文件都依赖它 - 若脚本里用了
open('data.json', 'w'),没设“起始于”,文件会写到系统目录(如C:\Windows\System32)而不是你预期的位置
每分钟/每5分钟运行?基本任务不够用
“创建基本任务”里的触发器最小粒度是“每天”,想实现高频调度(如每 3 分钟爬一次),必须用“创建任务”(非“基本任务”)→ 触发器 → 新建 → “按预定计划开始任务” → 勾选“重复任务间隔”,设为“5 分钟”,持续时间选“无限期”。
将提醒同步至 Windows/Outlook 日历。用户提及「提醒我」「设置提醒」「加到日历」「同步到日历」「日程」「calendar」「日历」时触发。支持Microsoft Graph API 设备代码流认证,无需 Web 服务器,直接写入用户 Outlook 日历。
立即学习“Python免费学习笔记(深入)”;
- 注意:Windows Server 默认最小间隔是 5 分钟;想更细(如 1 分钟),需手动编辑 XML 或改注册表(不推荐,稳定性风险高)
- 高频任务务必在脚本开头加锁机制(如检查
pidfile或用threading.Lock文件标记),否则前一次还没结束,后一次又启动,容易资源冲突或数据库死锁 - 建议在脚本末尾加日志记录实际执行耗时,方便后续判断是否真能撑住间隔节奏
安全选项不配好,任务根本不会跑
任务默认以 SYSTEM 用户运行,但多数 Python 爬虫需要访问网络、写入磁盘、调用浏览器驱动(如 chromedriver),这些操作 SYSTEM 权限不足或受限。
- 在任务属性 → “常规”选项卡 → “安全选项” → 勾选“不管用户是否登录都要运行”,并指定一个有桌面交互权限且已设密码的账户(如
Administrator) - 必须勾选“使用最高权限运行”,尤其当脚本涉及管理员级操作(如写注册表、访问受保护端口)
- 若服务器启用了 UAC,即使勾了最高权限,仍可能因令牌剥离失败;此时建议在脚本外层套一层
.bat,用start /B启动,并在任务中调用该.bat
真正麻烦的从来不是设置界面点几下,而是脚本在无人值守时悄无声息地卡住、崩溃、或写错位置——所有路径必须绝对,所有依赖必须显式声明,所有输出必须落盘可查。别信“它以前能跑”,重启、补丁、用户切换都可能让计划任务突然失联。

















