我需要在我的azure管道中执行一个python脚本,并附带额外的命令行参数。
我能够成功地运行内联脚本与此代码&我得到的输出如预期的那样:
1- for print ('Hello ', args.svc) as ('Hello, 'Service_De')
2 -印刷(‘你好’,args.env)("你好,"开发")
- task: PythonScript@0
inputs:
scriptSource: inline
script: |
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--svc")
parser.add_argument("--env")
args = parser.parse_args()
print ('Hello ', args.svc)
print ('Hello ', args.env)
arguments: --svc ${{parameters.service}}_${{parameters.environment}}
--env ${{parameters.environment}}
我有两个问题需要帮助:
问题# 1:当我退役的时候;环境参数和更新我的python任务作为两个参数的组合,脚本给了我一个错误print ('Hello ', args.svc_args.env)
我无法正确格式化python代码。理想情况下,我希望输出为(' hello ','Service_Dev')
- task: PythonScript@0
inputs:
scriptSource: inline
script: |
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--svc")
parser.add_argument("--env")
args = parser.parse_args()
print ('Hello ', args.svc_args.env)
arguments: --svc ${{parameters.service}}
--env ${{parameters.environment}}
问题# 2::当我使用filepath选项执行相同的工作代码时,它执行失败并给我一个错误:
IOError: [Errno 2]没有这样的文件或目录:'./group_vars/args.svc.yaml'
- task: PythonScript@0
inputs:
scriptSource: 'filePath'
scriptPath: "$(System.DefaultWorkingDirectory)/modify-config.py"
arguments: --svc ${{parameters.service}}_${{parameters.environment}}
#pythonInterpreter: # Optional
#workingDirectory: # Optional
#failOnStderr: false # Optional
displayName: 'Update Config files'
modify-config.py的代码如下:
#!/usr/bin/python
import os
import yaml
from jinja2 import Template
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--svc")
#parser.add_argument("--env")
args = parser.parse_args()
with open(r'./group_vars/args.svc.yaml') as file:
#value_list = yaml.load(file, Loader=yaml.FullLoader)
value_list = yaml.full_load(file)
您需要这样做才能获得真正的目录路径参见:从Python脚本
获取当前目录的父目录import os
import yaml
from jinja2 import Template
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--svc")
#parser.add_argument("--env")
args = parser.parse_args()
base_dir = Path(__file__).resolve().parent
file_path = os.path.join(base_dir, "group_vars/args.svc.yaml")
with open(file_path) as file:
#value_list = yaml.load(file, Loader=yaml.FullLoader)
value_list = yaml.full_load(file)