我正在为我当前的项目使用Boto3 for AWS。我需要为EC2提供一些不同的describe_images参数作为可选项,我不能使用通配符或空输入来绕过它们。我正在寻找一种方法来根据需要传递添加参数,而不是必须进行一些内容略有不同的<% if (errors.length > 0) { %>
<ul>
<% for (var i = 0; i < errors.length; i++) { %>
<li><%= errors[i].msg %></li>
<% } %>
</ul>
<% } %>
检查。
例如,请参阅下面的代码段。我希望动态添加if
和Owners
参数,如果它们是在上游提供的,但如果它们不是,则不包括它们。我还没有与谷歌运气好,所以我想要快速发帖。
ImageIds
由于
答案 0 :(得分:1)
如果查看signature of describe_images,您会看到它以关键字args(通常称为kwargs
)的形式接受参数。使用该签名和一点reading on expansion of iterables,您可以动态构建要传递给describe_images
电话的关键字参数。
下面是一个具有相同签名的函数的简单示例,它只是回显它所获得的关键字args,让您深入了解函数调用实际接收的内容。
def foo(**kwargs):
print(kwargs)
owners = None
image_ids = None
search_filters=['a', 'b']
describe_kwargs = {'ExecutableUsers':['all'], 'Filters':search_filters}
foo(**describe_kwargs)
# Now include image ids
describe_kwargs['ImageIds'] = ['ami-26ebbc5c']
foo(**describe_kwargs)
# Now include owners
describe_kwargs['Owners'] = ['309956199498']
foo(**describe_kwargs)
如果您运行此代码段,则会看到以下内容:
{'ExecutableUsers': ['all'], 'Filters': ['a', 'b']}
{'ExecutableUsers': ['all'], 'Filters': ['a', 'b'], 'ImageIds': ['ami-26ebbc5c']}
{'ExecutableUsers': ['all'], 'Filters': ['a', 'b'], 'ImageIds': ['ami-26ebbc5c'], 'Owners': ['309956199498']}
在您的情况下,听起来您希望根据&#34;是否有条件地使用每个describe_kwargs
和Owners
键更新ImageIds
dict。它们是在上游提供的。