Ansible调用Python脚本传参报错:TypeError类型不匹配问题排查
问题原因与修复方案
核心错误点
- sys.argv索引错误:
sys.argv[0]返回的是脚本自身的路径/文件名,并非你传入的第一个字符串参数。你实际传入的三个参数对应sys.argv[1](字符串)、sys.argv[2](max_retries)、sys.argv[3](attempt_number)。 - 参数类型未转换:命令行传入的所有参数都是字符串类型,直接用
%d格式化整数会触发类型错误,必须先将数字参数转为整数类型。 - 缺少sys模块导入:原脚本未导入
sys模块,会导致NameError。
修改后的Python脚本(script.py)
import sys # 修正参数索引,转换数字参数类型 input_str = sys.argv[1] max_retries = int(sys.argv[2]) current_attempt = int(sys.argv[3]) print("String %s" % input_str) print("Num1 %d" % max_retries) print("Num2 %d" % current_attempt)
额外说明
- Ansible Playbook部分无需修改,
attempt_number | int已经确保传递的是数字格式的字符串,脚本内转int即可完成类型匹配。 - 若环境默认使用Python3,print语句需保留括号(上述脚本已兼容),避免语法错误。
内容的提问来源于stack exchange,提问作者fr0zt
相关产品推荐
相关产品推荐

