首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打印ec2.describe_regions()返回的打印响应

打印ec2.describe_regions()返回的打印响应
EN

Stack Overflow用户
提问于 2018-08-19 05:02:42
回答 1查看 510关注 0票数 0

大家好,大家好,我正在学习python,目前我正在为ec2做一些作业,boto3连接到实例并通过python3启动t2微实例,下面是给出输出的小代码

代码语言:javascript
复制
import boto3

ec2 = boto3.client('ec2')

# Retrieves all regions/endpoints that work with EC2
response = ec2.describe_regions()

print('Regions:', response['Regions'])

代码是从这里取来的-- https://boto3.readthedocs.io/en/stable/guide/ec2-example-regions-avail-zones.html,这给了我以下输出

代码语言:javascript
复制
Regions: 
[
{'Endpoint': 'ec2.ap-south-1.amazonaws.com', 'RegionName': 'ap-south-1'}, 
{'Endpoint': 'ec2.eu-west-3.amazonaws.com', 'RegionName': 'eu-west-3'}, 
{'Endpoint': 'ec2.eu-west-2.amazonaws.com', 'RegionName': 'eu-west-2'}, 
{'Endpoint': 'ec2.eu-west-1.amazonaws.com', 'RegionName': 'eu-west-1'},
{'Endpoint': 'ec2.ap-northeast-2.amazonaws.com', 'RegionName': 'ap-northeast-2'},
{'Endpoint': 'ec2.ap-northeast-1.amazonaws.com', 'RegionName': 'ap-northeast-1'}, 
{'Endpoint': 'ec2.sa-east-1.amazonaws.com', 'RegionName': 'sa-east-1'}, 
{'Endpoint': 'ec2.ca-central-1.amazonaws.com', 'RegionName': 'ca-central-1'},
{'Endpoint': 'ec2.ap-southeast-1.amazonaws.com', 'RegionName': 'ap-southeast-1'},
{'Endpoint': 'ec2.ap-southeast-2.amazonaws.com', 'RegionName': 'ap-southeast-2'}, 
{'Endpoint': 'ec2.eu-central-1.amazonaws.com', 'RegionName': 'eu-central-1'}, 
{'Endpoint': 'ec2.us-east-1.amazonaws.com', 'RegionName': 'us-east-1'}, 
{'Endpoint': 'ec2.us-east-2.amazonaws.com', 'RegionName': 'us-east-2'},
{'Endpoint': 'ec2.us-west-1.amazonaws.com', 'RegionName': 'us-west-1'}, 
{'Endpoint': 'ec2.us-west-2.amazonaws.com', 'RegionName': 'us-west-2'}
]

我要做的是,在字典中逐个打印由函数ec2.describe_regions()返回的值。

代码语言:javascript
复制
print (response[0],response[1],response[2])  

但这给了我关键错误

代码语言:javascript
复制
describe_regions2.py", line 9, in <module>
    print (response[0])
KeyError: 0

如果我做了一个

代码语言:javascript
复制
print (response['Endpoint'])

那我也会犯错误

代码语言:javascript
复制
describe_regions2.py", line 9, in <module>
    print (response['Endpoint'])
KeyError: 'Endpoint'
>>> 

如何获得ec2.describe_regions()的各个元素--我在这里阅读了文档regions,它在使用print(response)时给出了预期的输出。

这里,我只想从字典中返回几个想要的元素,而不是所有的输出。这就是我无法在代码中得到的。如果我用

代码语言:javascript
复制
print (response['Regions'][0]['Endpoint'])

我得到了

代码语言:javascript
复制
ec2.ap-south-1.amazonaws.com

如果我用

代码语言:javascript
复制
print (response['Regions'][0])

我得到了{'Endpoint': 'ec2.ap-south-1.amazonaws.com', 'RegionName': 'ap-south-1'}

我尝试过的新代码是

代码语言:javascript
复制
import boto3

ec2 = boto3.client('ec2')

# Retrieves all regions/endpoints that work with EC2
response = ec2.describe_regions()
c=0
#print('Regions:', response['Regions'])
#for i in response:
#    print ("i= ",i+" response[i]=",response[i])
#    print ("\n")
print ("\nhale luliya\n")
print ("Endpoint="+response['Regions'][0]['Endpoint'])
print ("RegionName="+response['Regions'][0]['RegionName'])
print ("Full response for list[0]"+response['Regions'][0])

最后一个print语句会出现错误。

代码语言:javascript
复制
\describe_regions2.py", line 15, in <module>
    print ("Full response for list[0]"+response['Regions'][0])
TypeError: can only concatenate str (not "dict") to str

如何对响应于for loop.To的整个列表进行迭代,只打印所需的值?我能做到

代码语言:javascript
复制
for key,value in response['Regions'][0].items():
    print(key,value)

这给了我

代码语言:javascript
复制
Endpoint ec2.ap-south-1.amazonaws.com
RegionName ap-south-1

这个问题现在解决了,在这里更新这里的复杂性是因为print(type(response['Regions']))给出了<class 'list'>print(type(response['Regions']))<class 'dict'>,并且

代码语言:javascript
复制
print (type(response))

<class 'dict'>,所以字典也在字典中返回,一个列表和另一个字典被返回。所以我不能understand.Output

代码语言:javascript
复制
for data in response['Regions']: 
    print(data) 
for key,value in response['ResponseMetadata'].items(): 
    print(key,value)

帮助我理解了被归还的东西

代码语言:javascript
复制
{'Endpoint': 'ec2.ap-south-1.amazonaws.com', 'RegionName': 'ap-south-1'}
{'Endpoint': 'ec2.eu-west-3.amazonaws.com', 'RegionName': 'eu-west-3'}
{'Endpoint': 'ec2.eu-west-2.amazonaws.com', 'RegionName': 'eu-west-2'}
{'Endpoint': 'ec2.eu-west-1.amazonaws.com', 'RegionName': 'eu-west-1'}
{'Endpoint': 'ec2.ap-northeast-2.amazonaws.com', 'RegionName': 'ap-northeast-2'}
{'Endpoint': 'ec2.ap-northeast-1.amazonaws.com', 'RegionName': 'ap-northeast-1'}
{'Endpoint': 'ec2.sa-east-1.amazonaws.com', 'RegionName': 'sa-east-1'}
{'Endpoint': 'ec2.ca-central-1.amazonaws.com', 'RegionName': 'ca-central-1'}
{'Endpoint': 'ec2.ap-southeast-1.amazonaws.com', 'RegionName': 'ap-southeast-1'}
{'Endpoint': 'ec2.ap-southeast-2.amazonaws.com', 'RegionName': 'ap-southeast-2'}
{'Endpoint': 'ec2.eu-central-1.amazonaws.com', 'RegionName': 'eu-central-1'}
{'Endpoint': 'ec2.us-east-1.amazonaws.com', 'RegionName': 'us-east-1'}
{'Endpoint': 'ec2.us-east-2.amazonaws.com', 'RegionName': 'us-east-2'}
{'Endpoint': 'ec2.us-west-1.amazonaws.com', 'RegionName': 'us-west-1'}
{'Endpoint': 'ec2.us-west-2.amazonaws.com', 'RegionName': 'us-west-2'}
RequestId 221d8d0f-908f-4996-8c88-87b00c5da592
HTTPStatusCode 200
HTTPHeaders {'content-type': 'text/xml;charset=UTF-8', 'content-length': '2559', 'vary': 'Accept-Encoding', 'date': 'Sun, 19 Aug 2018 06:20:40 GMT', 'server': 'AmazonEC2'}
RetryAttempts 0
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-19 05:43:48

您所面临的问题可以通过使用以下简单步骤进行调试。

每当您得到响应时,请执行print(type(response))

  • 如果输出是str,那么就意味着您需要使用python自己的json库转换为json
  • 如果获得输出list,则可以通过索引(如response[0], response[1] )或循环访问它。
  • 如果获得输出dict,则可以通过名称(如response['Endpoint'] )访问它。

通常,在处理api数据时,需要遵循上述步骤。您可能会得到嵌套级别的结果,如字典列表列表、字典列表字典,或者可以转换为json的普通字符串。

更新:您可以在字典上迭代,如下所示:

代码语言:javascript
复制
data = {'Endpoint': 'ec2.ap-south-1.amazonaws.com', 'RegionName': 'ap-south-1'}
for key,value in data.items():
    print(key , value)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51914646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档