Azure DevOps Pipeline中PythonScript@0传递JSON参数失败求助
解决Azure DevOps Pipeline中PythonScript任务传递JSON参数的问题
你遇到的问题根源是shell会将参数中的空格解析为参数分隔符,导致原本的JSON字符串被拆分成多个独立参数,sys.argv[1]只能拿到第一个空格前的片段{arg1:。以下是两种可行的解决方法:
方法1:直接转义并包裹JSON字符串
在Pipeline的arguments字段中,用双引号将整个JSON字符串包裹,同时转义JSON内部的双引号,确保shell将其识别为单个参数:
- task: PythonScript@0 inputs: scriptSource: 'filePath' scriptPath: '$(workingDir)/test.py' arguments: '"{\"arg1\": \"value1\", \"arg2\": \"value2\"}"'
对应的Python代码修改为:
import sys import json if __name__ == "__main__": json_param = sys.argv[1] data = json.loads(json_param) print(data["arg1"]) # 输出 value1 print(data["arg2"]) # 输出 value2
方法2:使用Pipeline变量传递(更易维护)
先在Pipeline中定义包含JSON的变量,传递时用双引号包裹变量,避免直接转义的繁琐:
variables: jsonArguments: '{"arg1": "value1", "arg2": "value2"}' - task: PythonScript@0 inputs: scriptSource: 'filePath' scriptPath: '$(workingDir)/test.py' arguments: '"$(jsonArguments)"'
Python代码与方法1一致,即可正常解析JSON参数。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

