在boto3中有一个功能:
ec2.instances.filter()
文件: http://boto3.readthedocs.org/en/latest/reference/services/ec2.html#instance
说它返回一个列表(ec2.Instance)我希望...
当我尝试打印返回时,我得到了这个:
ec2.instancesCollection(ec2.ServiceResource(), ec2.Instance)
我已经尝试过搜索ec2.instanceCollection的任何提及,但我发现的唯一的东西类似于ruby。
我想遍历这个instanceCollection,所以我可以看到它有多大,存在什么样的机器以及类似的东西。 问题是我不知道它是如何工作的,当它是空的迭代根本不起作用时(它会抛出错误)
答案 0 :(得分:2)
filter
方法不返回列表,它返回一个iterable。这基本上是一个Python生成器,它将以有效的方式按需生成所需的结果。
你可以在这样的循环中使用这个迭代器:
for instance in ec2.instances.filter():
# do something with instance
或者如果你真的想要一个列表,你可以将迭代器变成一个列表:
instances = list(ec2.instances.filter())
答案 1 :(得分:2)
我要添加此答案,因为5年后,我遇到了同样的问题,并转了一圈试图找到答案。
首先,文档中的返回类型错误(仍然)。如您所说,它声明返回类型为:
list(ec2.Instance)
应该在哪里:
ec2.instancesCollection
。
在撰写本文时,github中存在一个涉及此问题的公开问题-https://github.com/boto/boto3/issues/2000。
调用过滤器方法时,将为您针对其调用方法的特定类型的资源创建ResourceCollection
。在这种情况下,资源类型为instance
,它给出了instancesCollection
。您可以在此处查看ResourceCollection
的{{1}}超类的代码:
https://github.com/boto/boto3/blob/develop/boto3/resources/collection.py
此处的文档提供了集合的概述:https://boto3.amazonaws.com/v1/documentation/api/latest/guide/collections.html
要了解如何使用它并实际回答您的问题,我要做的是将迭代器转换为列表,并在大小大于0时遍历列表。
instancesCollection
这可能不是最好的方法,但对我有用。