You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Python获取退出码?执行脚本后ERRORLEVEL始终为1的问题

问题诊断与修复方案

首先咱们来拆解下你遇到的问题:不管Python脚本执行逻辑是否匹配,CMD里的ERRORLEVEL始终返回1,核心原因出在Python代码的逻辑漏洞和退出方式上,同时CMD脚本也可以做些优化来确保退出码被正确捕获。

1. Python代码的核心问题

(1)变量作用域逻辑错误

你代码里的FBlist是在for rec循环内部定义的,循环结束后它只会保留文件最后一行分割后的元素列表。所以FBlist_set = set(FBlist)实际上只检查了最后一行的元素,而不是所有行的内容。如果最后一行没有和Array重叠的元素,哪怕前面行有匹配,最终也会返回1。

(2)exit()的可靠性问题

在Python脚本中,exit()是为交互式环境设计的函数,在脚本里返回退出码给外部进程(比如CMD)时,sys.exit()的稳定性更高。

2. 修复后的Python代码

修改逻辑,收集所有行的元素到一个总集合中,并用sys.exit()返回退出码:

import sys  # 导入sys模块

infile = "FeatureByte.txt"
Array = ["6J", "yB", "ss", "11"]
all_fb_elements = set()  # 存储所有行的元素集合

with open(infile, "r") as input_file:
    output_list = []
    for rec in input_file.read().splitlines():
        rec = rec[:-3]
        FBlist = [rec[i:i+2] for i in range(0, len(rec), 2)]
        output_list.append(FBlist)
        all_fb_elements.update(FBlist)  # 将当前行元素加入总集合
    print(output_list)

array_set = set(Array)
if array_set & all_fb_elements:
    print("Found")
    sys.exit(0)  # 返回成功退出码0
else:
    print("Not Found")
    sys.exit(1)  # 返回失败退出码1

3. 优化CMD脚本(确保退出码正确捕获)

你的CMD脚本里定义了PYTHONPATH和PYTHONEXE但没实际使用,而且ERRORLEVEL会被后续命令覆盖,建议调整为:

set logfile=C:\Users\Log.txt
:: 直接调用Python解释器执行脚本
"C:\Users\AppData\Local\Programs\Python\Python37-32\python.exe" -B C:\Users\Desktop\Pyth.py
:: 立即保存退出码,避免被其他命令覆盖
set "exit_code=%ERRORLEVEL%"
echo %exit_code% >> "%logfile%"

验证效果

  • 当FeatureByte.txt中任意一行处理后的元素包含Array里的任意值时,脚本输出Found,Log.txt中写入0。
  • 当所有行处理后的元素都不匹配Array时,输出Not Found,Log.txt中写入1。

内容的提问来源于stack exchange,提问作者Job

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:07:02