WebLogic 10.3.3下WLST脚本执行报错求助(代码无问题)
问题根源
你的报错ValueError: invalid literal for int() with base 10: 'Temporary'出现在if int(webVer) > 11:这一行,核心原因是WebLogic 10.3.3和12.2.1.1.0的version字符串格式不一致,导致你提取主版本号的逻辑失效。
在12.2.1.1.0中,version的输出大概是这样的:
WebLogic Server 12.2.1.1.0 Wed Jan 13 21:40:54 PST 2016 1755248
此时webVer.split(' ')[2]能拿到12.2.1.1.0,再拆分后得到主版本号12,转int完全没问题。
但在部分10.3.3环境中,version会包含Temporary标识,输出类似:
WebLogic Server Temporary Build 10.3.3.0 Tue Jul 20 08:05:23 PDT 2010 1323601
这时webVer.split(' ')[2]取到的是Temporary,而非版本号,后续转int自然抛出错误。
修复方案
修改版本号提取逻辑,不要依赖固定位置的字符串拆分,改用正则表达式精准匹配版本号的数字部分,这样能兼容不同格式的version输出。
把原来的版本提取代码:
webVer = version webVer = webVer.split(' ')[2].split('.')[0]
替换为以下代码:
import re webVer = version # 从版本字符串中匹配第一个数字开头的主版本号(比如10、12) version_match = re.search(r'\b(\d+)\.', webVer) if version_match: webVer = version_match.group(1) else: # fallback逻辑:如果正则匹配失败,尝试原方式或默认设为10(适配10.3.3) try: webVer = webVer.split(' ')[2].split('.')[0] except IndexError: webVer = '10'
这个修改会优先从版本字符串中提取数字开头的主版本号,不管中间有没有Temporary这类额外标识,都能正确拿到10或12,避免转int报错。
额外验证与提示
你可以先在10.3.3的WLST控制台中执行print version,确认输出是否包含Temporary字样,这能帮你确认问题的触发场景。
另外,还要注意10.3.3和12c的WLST API差异:比如cmo.getOverallHealthState()的返回格式在10.3.3中是否和12c一致?如果后续还有其他报错,可能需要针对旧版本做适配,但当前的核心问题是版本号提取的逻辑错误,修复后应该能解决当前的ValueError。
内容的提问来源于stack exchange,提问作者Emrahall

