如何在Python中将AWS CLI命令输出保存到var?

时间:2019-06-13 10:10:28

标签: python amazon-web-services amazon-s3

我正在尝试将AWS CLI命令保存到python变量(列表)中。诀窍是下面的代码返回我想要的结果,但不将其保存到变量中并返回空列表。

import os
bashCommand = 'aws s3api list-buckets --query "Buckets[].Name"'
f = [os.system(bashCommand)]

print(f)

输出:

[
"bucket1",
"bucket2",
"bucket3"
]
[0]

所需的输出:

[
"bucket1",
"bucket2",
"bucket3"
]
("bucket1", "bucket2", "bucket3")

3 个答案:

答案 0 :(得分:2)

如果您使用的是Python并且希望列出存储桶,那么最好使用适用于Python的AWS开发工具包,即boto3

import boto3

s3 = boto3.resource('s3')
buckets = [bucket.name for bucket in s3.buckets.all()]

请参阅:S3 — Boto 3 Docs

这比调出AWS CLI(本身使用boto!)更为明智。

答案 1 :(得分:0)

我使用此命令创建所有存储桶的Python列表:

bucket_list = eval(subprocess.check_output('aws s3api list-buckets --query "Buckets[].Name"').translate(None, '\r\n '))

答案 2 :(得分:0)

您真的不需要任何花哨的东西,您要做的就是导入子进程和json并使用它们:)

这已在python3.6和Linux上进行了测试

output = subprocess.run(["aws", "--region=us-west-2", "s3api", "list-buckets", "--query", "Buckets[].Name"],  stdout=subprocess.PIPE, stderr=subprocess.PIPE)

output_utf8=output.stdout.decode('utf-8')
output_utf8_json = json.loads(output_utf8)
print(output_utf8_json)

for key in output_utf8_json:
     print(key)