You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python调用VMware Aria Automation Config API时.format方法失效求助

问题:调用VMware Aria Automation Config API时使用.format传递参数失败

我在用Python调用VMware Aria Automation Config API实现任务自动化时,发现没法用.format方法给API方法传参,直接传参能正常运行,但用字符串格式化后就报错。

无法正常运行的代码

from sseapiclient import APIClient
client = APIClient('http://myaac.com', username, password)

mycommand = 'cmd="local",fun="test.ping",tgt={"saltmaster":{"tgt":"minion*","tgt_type":"glob"}}'
client.api.cmd.route_cmd('{}'.format(mycommand))

报错信息

"3004: Request validation failure.
  job_uuid:
    - Not a valid UUID.
  cmd:
    - Expected 'cmd'"

能正常运行的代码

from sseapiclient import APIClient
client = APIClient('http://myaac.com', username, password)

client.api.cmd.route_cmd(cmd="local",fun="test.ping",tgt={"saltmaster":{"tgt":"minion*","tgt_type":"glob"}})

解决思路

问题根源

你用.format把参数拼成了单个字符串,但route_cmd方法需要的是关键字参数(kwargs),不是单个字符串参数。直接传cmd="local", fun="test.ping"...是给方法传递了多个独立的关键字参数,而用字符串格式化后只传了一个字符串,方法会把这个字符串当成第一个位置参数job_uuid(所以报UUID无效),同时根本没收到cmd等必要参数,自然报错。

正确解决方法

方法1:用字典存储参数+解包传递(推荐)

把参数存在字典里,需要动态修改时直接调整字典的键值,然后用**运算符把字典解包成关键字参数传给方法,既灵活又符合API要求:

from sseapiclient import APIClient
client = APIClient('http://myaac.com', username, password)

# 用字典存储参数,方便动态修改
cmd_params = {
    "cmd": "local",
    "fun": "test.ping",
    "tgt": {"saltmaster": {"tgt": "minion*", "tgt_type": "glob"}}
}

# 解包字典作为关键字参数传递
client.api.cmd.route_cmd(**cmd_params)

比如你要修改目标主机规则,直接改cmd_params["tgt"]["saltmaster"]["tgt"]即可,非常方便。

方法2:字符串转字典(不推荐)

如果非要用字符串拼接的方式,需要把字符串解析成字典再解包,但这种方法容易出错,还存在安全风险(比如参数含恶意代码),仅作参考:

from sseapiclient import APIClient
import json

client = APIClient('http://myaac.com', username, password)

mycommand_str = 'cmd="local",fun="test.ping",tgt={"saltmaster":{"tgt":"minion*","tgt_type":"glob"}}'
# 分割字符串成键值对,转成字典
cmd_params = {}
for item in mycommand_str.split(','):
    key, value = item.split('=', 1)
    # 处理字符串引号
    value = value.strip('"')
    # 解析tgt的字典结构
    if key == 'tgt':
        value = json.loads(value)
    cmd_params[key] = value

client.api.cmd.route_cmd(**cmd_params)

内容的提问来源于stack exchange,提问作者Norskyi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 10:44:54