我试图将变量的输出重定向并写入文件,但只有输出的最后一行显示在我写入的文件中。但是,当我对变量进行打印时,我得到了我期望的所有行。
rds = boto3.client('rds')
rds_instances = rds.describe_db_instances()['DBInstances']
for databases in rds_instances:
arns = ("{0}".format(databases['DBInstanceArn']))
# print (arns)
f = open('/tmp/arns', 'a')
f.write(arns)
f.close()
当我打印时的输出示例我得到多个rds arn&#39>:
arn:aws:rds:us-east-1:222222222222:db:databasename01
arn:aws:rds:us-east-1:222222222222:db:databasename02
arn:aws:rds:us-east-1:222222222222:db:databasename03
然而,当我查看我写的文件时,只有:
arn:aws:rds:us-east-1:222222222222:db:databasename03
答案 0 :(得分:5)
您应该使用with open(filename, mode) as f:
到write to files,确保即使发生异常也会关闭它们。
只要代码离开with
下方的块,您的文件就会自动关闭 - 无需手动执行。
您可以像这样重新编写代码:
rds = boto3.client('rds')
rds_instances = rds.describe_db_instances()['DBInstances']
with open('/tmp/arns', 'a') as f:
for databases in rds_instances:
arns = ("{0}".format(databases['DBInstanceArn']))
f.write(arns + '\n') # indented so it is executed foreach "for" loop
您可能还会在写入输出中添加'\n'
- 它不会自动添加。
答案 1 :(得分:1)
打印结果时,每次循环运行时都会打印arns
的值。
当您将值写入文件时,它只会在上次循环运行时获取arns
的值。
你可以做的是在循环之前打开文件并在循环中写入值而不是在循环之后写入。然后在循环后关闭文件。