我只种了如何在boto3使用的nextToken。我正在进行的API调用预计应该包含300个条目。我只有100。我知道我需要遍历下一个令牌,但是我在如何做到这一点上苦苦挣扎。我是python军队的新手。
def myservers():
response = client.get_servers(maxResults=100,)
additional = client.get_servers(nextToken=response['nextToken'])
这个小小的剪报会给我前50个加上第一个“ nextToken”,总共给我100个项目。显然,我需要一遍又一遍地迭代才能得到其余的内容。我希望有300多个物品。
答案 0 :(得分:0)
我在这里使用了建议:
https://github.com/boto/botocore/issues/959#issuecomment-429116381
您必须继续调用传入NextToken的client.get_servers()。
答案 1 :(得分:0)
我只会做一个简单的while
循环:
response = client.get_servers()
results = response["serverList"]
while "NextToken" in response:
response = client.get_servers(NextToken=response["NextToken"])
results.extend(response["serverList"])
答案 2 :(得分:0)
派生自 answer @Luke mentioned,这是一个使用 nextToken
调用任何方法的简单方法
def get_all_boto_records(method, args_dict, response_to_list):
all_records = []
extraArgs = {**args_dict}
while True:
resp = method(**extraArgs)
all_records += response_to_list(resp)
if "nextToken" in resp:
extraArgs["nextToken"] = resp["nextToken"]
else:
break
return all_records
使用方法如下:
all_log_records = get_all_boto_records(
client.filter_log_events,
{
"logGroupName": "",
"filterPattern": "",
},
lambda x: x["events"],
)
另一个很好的例子,用另一种方法来获取日志组
all_log_groups = get_all_boto_records(
client.describe_log_groups,
{"logGroupNamePrefix": f"/aws/lambda/{q}"},
lambda x: x["logGroups"],
)