Windows任务计划程序不执行Python屏幕亮度调整脚本的原因是什么?
修复步骤
1. 修正批处理文件
你当前的批处理里有pause命令,任务计划后台执行时会阻塞进程等待输入,直接删除即可。同时补充路径切换和日志输出方便排查问题,修改后的批处理内容如下:
@echo off cd /d "C:\Users\dannl\scripts\" "C:\Users\dannl\AppData\Local\Programs\Python\Python39\pythonw.exe" "brightness.pyw" >> brightness_run_log.txt 2>&1
这里改用pythonw.exe运行.pyw后缀的脚本,不会弹出控制台窗口,同时把运行日志输出到同目录的txt文件,方便后续定位报错。
2. 调整任务计划配置
- 安全选项必须勾选「仅在用户登录时运行」:调整屏幕亮度的API需要运行在用户图形会话中,选择「不管用户是否登录都运行」会导致程序跑在无图形权限的系统会话,调用亮度调整接口直接失效。
- 勾选「使用最高权限运行」:修改系统显示参数需要管理员权限,未勾选时权限不足会导致操作无响应。
- 操作页的「起始于(可选)」填写脚本所在目录
C:\Users\dannl\scripts\,避免相对路径读取错误。 - 设置页勾选「请勿启动新实例」,避免脚本重复运行产生冲突。
3. 优化脚本鲁棒性
你当前脚本没有网络请求异常捕获,当ipstack接口请求失败时会直接崩溃退出,可补充异常捕获逻辑,示例修改如下:
# importing the module import screen_brightness_control as sbc import datetime from datetime import timezone import json import requests import sys from suntime import Sun import time try: send_url = "http://api.ipstack.com/check?access_key=68d6a43e7f37d2152f9bb7dc199b87ef" geo_req = requests.get(send_url, timeout=10) geo_req.raise_for_status() geo_json = json.loads(geo_req.text) latitude = geo_json['latitude'] longitude = geo_json['longitude'] except Exception as e: # 网络请求失败时替换为你所在城市的固定经纬度即可 latitude = 39.9042 longitude = 116.4074 sun = Sun(latitude, longitude) today_sr = sun.get_sunrise_time() today_ss = sun.get_sunset_time() print(today_sr) print(today_ss) while True: current_time = datetime.datetime.now(timezone.utc) if today_ss > current_time > today_sr and sbc.get_brightness() != 100: sbc.fade_brightness(100, interval=5) elif current_time > today_ss and sbc.get_brightness() != 0: sbc.fade_brightness(0, interval=5) sys.exit() time.sleep(60)
修改完成后先手动运行批处理确认效果正常,再到任务计划中点击运行测试,如果仍有问题直接查看同目录生成的日志文件即可定位具体报错。
内容的提问来源于stack exchange,提问作者DNL317
相关产品推荐
相关产品推荐

