使用python脚本处理azure cli时出错



我一直在尝试在python脚本中处理azure cli命令的错误。我见过powershell能够在命令运行后提取退出代码的解决方案,但这是专门针对powershell的。

我遇到的场景是,在我的python脚本中运行az-devops-cli命令来创建一个团队。使用az.cli模块,命令如下:

az('devops team create --name ' + '"' + team_name + '"' + ' --description ' + '"' + description + '"' + ' --org ' + org_url + ' --project ' + '"' + project_name + '"')

当它遇到错误时,我无法采取任何措施来捕捉它,因为错误不是发生在调用中,而是响应中。

az调用创建团队-->退出代码1,错误响应团队名称已存在。调用成功,因此不会在脚本中触发异常。

尝试。。除非由于呼叫成功而不起作用。

[2022-08-01T23:32:45.498Z] Python HTTP trigger function processed a request.
[2022-08-01T23:32:46.287Z] command args: devops team create --name {} --description {} --org {} --project {}
[2022-08-01T23:32:46.667Z] extension name: azure-devops
[2022-08-01T23:32:46.668Z] extension version: 0.25.0
[2022-08-01T23:32:46.681Z] received PAT from environment variable
[2022-08-01T23:32:46.683Z] Creating connection with personal access token.
[2022-08-01T23:32:46.901Z] Suppress exception:
Traceback (most recent call last):
"some code"
[2022-08-01T23:32:47.599Z] The team
[2022-08-01T23:32:47.603Z] The team
[2022-08-01T23:32:47.604Z] exit code: 1
[2022-08-01T23:32:47.612Z] Executed 'Functions.FunctionApp' (Failed, Id="an id", Duration=2117ms)

az返回namedtuple而不是引发异常,并且namedtuple的格式为:

('exit_code', 'result_dict', 'log')

因此,您可以销毁返回值并获得返回代码。

这里有一个非常人为的例子,它试图创建团队,然后检查返回值,如果得到非零的返回代码,就停止循环。

#!/usr/bin/env python3
from az.cli import az
team_name = "FancyNewTeam"
desc = "A team description"
org = "https://dev.azure.com/myorg"
project = "slackcat"
cmd = f"devops team create --name {team_name} --description {desc} --organization={org} --project {project}"
while True:
ret, res, logs = az(cmd)
if ret == 0:
print("Command succeeded!")
else:
print("Command failed. Stopping loop")
break

我账户上的输出是…

❯ python az_script.py
Command succeeded!
Command failed. Stopping loop

最新更新