You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python脚本在终端运行正常但Windows任务计划程序执行失败(错误码0x1)

Python脚本在终端运行正常但Windows任务计划程序执行失败(错误码0x1)

这种手动跑完全正常、但Windows任务计划执行到一半卡住报错0x1的情况确实挺挠头的。从你的日志来看,脚本成功打开了配置文件,但在读取[Communications]节下的配置项时直接退出,连错误信息都没留下——这说明问题就出在这段读取配置的代码里,但你没捕获到具体异常。下面给你几个排查和解决的方向,按优先级来:

1. 先给脚本加异常捕获,拿到具体错误信息

现在最关键的是搞清楚到底哪一步报错了,所以先给读取配置的代码加上异常捕获,把错误详情写入日志。修改这段代码:

logsomething("Opened Five9CredsSA.ini")
try:
    Five9Username = config['Communications']['Five9UserName']
    logsomething("Five9 User Name: " + Five9Username)
    Five9Password = config['Communications']['Five9Password']
    logsomething("Five9 Password (don't tell anyone): " + Five9Password)
except Exception as e:
    # 记录错误描述
    logsomething(f"Error reading config values: {str(e)}")
    # 记录完整异常栈,方便定位具体代码行
    import traceback
    logsomething(traceback.format_exc())
    # 确保日志文件被正确关闭
    if 'FileNumber' in logstuff and logstuff['FileNumber']:
        logstuff['FileNumber'].close()
    raise  # 重新抛出异常,保留错误码以便排查

不管是权限问题、配置项缺失还是编码错误,加上这段后都会被详细记录到日志里,你就能精准定位问题了。

2. 排查网络共享文件的访问权限

你的配置文件在网络共享路径//pri-lvm-na01/export_five9/Util/Five9CredsSA.ini,这是任务计划执行最容易踩坑的点:

  • 如果任务设置为「不管用户是否登录都要运行」,默认会用系统账户(SYSTEM)执行,这个账户完全没有访问网络共享的权限,必须改成你手动运行脚本的用户账户,并且一定要保存密码(任务计划设置用户时必须输入密码,否则无法访问共享资源)。
  • 即使用的是你自己的用户账户,也要确认该账户对这个共享文件夹同时拥有共享权限NTFS权限。有时候手动访问是因为系统缓存了凭据,但任务计划的执行上下文不会自动继承这些缓存,你可以在「控制面板→凭据管理器」里手动添加该共享路径的凭据,避免权限问题。

3. 检查任务计划的执行上下文细节

  • 确认任务计划的「起始于」路径是否完全正确,要和脚本所在的c:/Software/Py一致,不要带引号,也不要输错路径。
  • 可以在脚本开头加几行日志,打印当前执行环境的关键信息,对比手动运行的日志找差异:
    import getpass
    logsomething(f"Running as user: {getpass.getuser()}")
    logsomething(f"Current working directory: {os.getcwd()}")
    logsomething(f"TEMP path: {os.environ.get('TEMP')}")
    

4. 确认配置文件的读取细节

虽然手动运行没问题,但任务计划的编码环境可能不同:

  • config.read()指定编码格式,避免编码解析错误:
    config.read("//pri-lvm-na01/export_five9/Util/Five9CredsSA.ini", encoding='utf-8-sig')
    
  • 检查配置文件Five9CredsSA.ini的格式,确保[Communications]节存在,且Five9UserNameFive9Password的拼写完全正确(ConfigParser默认是大小写敏感的)。

5. 验证Python环境的一致性

确认任务计划调用的Python和你手动运行的是同一个版本:

  • 在你的批处理文件里加一行:
    "C:/Program Files/Python312/python.exe" --version >> Five9INRRpt.log
    
  • 手动运行python --version,对比两个版本是否一致,避免任务计划调用了其他版本的Python,导致依赖包缺失。

按这个顺序排查,先拿到具体错误信息,就能少走很多弯路了。

备注:内容来源于stack exchange,提问作者Steve

火山引擎 最新活动