Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Boto3显示最后一条记录的不完整信息_Python_Python 3.x_Amazon Web Services_Boto3 - Fatal编程技术网

Python Boto3显示最后一条记录的不完整信息

Python Boto3显示最后一条记录的不完整信息,python,python-3.x,amazon-web-services,boto3,Python,Python 3.x,Amazon Web Services,Boto3,我正在编写一个Python脚本,使用boto3导出一些实例的信息,并将这些信息打印到屏幕上。 假设有10个实例在AWS区域中运行,脚本将向我显示9个实例的完整信息,最后一个实例显示不完整 我试图修改我函数的for语句,但没有成功,怎么了 如果我执行aws ec2 description instances--instance id XXX--region us-east-2我可以看到所有信息 这是我代码的一部分: import boto3 def get_ec2_instances(ec2):

我正在编写一个Python脚本,使用boto3导出一些实例的信息,并将这些信息打印到屏幕上。 假设有10个实例在AWS区域中运行,脚本将向我显示9个实例的完整信息,最后一个实例显示不完整

我试图修改我函数的for语句,但没有成功,怎么了

如果我执行aws ec2 description instances--instance id XXX--region us-east-2我可以看到所有信息

这是我代码的一部分:

import boto3

def get_ec2_instances(ec2):
    for instances in ec2['Reservations']:
        for instance in instances['Instances']:
            print(instance['InstanceId'])
            print(instance['ImageId'])
            print(instance['InstanceType'])
            print(instance['KeyName'])
            print(instance['LaunchTime'])
            print(instance['Monitoring'])


client = boto3.client('ec2')
ec2 = client.describe_instances()
get_ec2_instances(ec2)
输出:

i-0000000000000000 F-ami-00000000 6-t3a.2xlarge-AWS-2021-06-04 13:01:28+00:00-{'State':'disabled'}

i-0000000000000000 9-ami-00000000 6-t3a.2xlarge-TestAWS-2021-06-04 13:02:35+00-{'State':'disabled'}

i-0000000000000000 1-ami-000000036-r4.xlarge

PS C:\env>

更新:

我发现如果一个值为空,打印就会崩溃,我的意思是通常
实例['KeyName']
为空,如果我尝试
打印(实例['KeyName'])
脚本就会崩溃

如何解决它?

您可以使用
get()
方法。它采用可选的默认值,并且不会引发异常

print(instance.get('KeyName', 'KeyName is not in instance'))

以下代码可能有效,因为它解决了方法中的两个问题:

  • 它使用分页来确保返回所有实例,即使有多个结果页(由响应中的
    NextToken
    键指示)
  • 它用于访问结果字典中的项,避免在响应中不存在预期键时出现异常,并在这种情况下打印
    None
  • 导入boto3
    def get_ec2_实例(分页器):
    对于paginator.paginate()中的页面:
    对于第[‘预订’]页中的预订:
    例如,在预订['Instances']中:
    打印(instance.get('InstanceId'))
    打印(instance.get('ImageId'))
    打印(instance.get('InstanceType'))
    打印(instance.get('KeyName'))
    打印(instance.get('LaunchTime'))
    打印(instance.get('Monitoring'))
    client=boto3.client('ec2')
    ec2_paginator=client.get_paginator('descripe_instances'))
    获取ec2_实例X(ec2_分页器)
    
    我很确定这是您的控制台/外壳的问题,请尝试在
    get\u ec2\u instancesx
    调用之后添加一个虚拟的
    print(“某物”)
    。请注意
    descripe\u instances
    结果是分页的。如果响应中存在
    NextToken
    ,则您需要使用该令牌进行额外调用以获得更多结果。我认为这不是shell问题,测试成功运行消息已打印,但结果仍不完整谢谢!!!它就像一个魅力!!!嘿成功了!!!谢谢!!!如果您标记成功的解决方案,它将帮助社区。