如何在python脚本中使用awscli



我使用aws ec2服务与awscli。现在我想把我在控制台中键入的所有命令放入一个python脚本中。我看到,如果我在python脚本中编写import awscli,它工作得很好,但我不明白如何在脚本中使用它。例如,我如何在import awscli之后执行python脚本中的aws ec2 run-instances <arguments>命令?为了说清楚,我不是在寻找像os.system('aws ec2 run-instances <arguments>')这样的解,我在寻找像

这样的东西
import awscli
awscli.ec2_run-instances(<arguments>)

您可以使用brilliant sh包来完成。你可以模仿python包,sh为你做包装。

import sh
s3 = sh.bash.bake("aws s3")
s3.put("file","s3n://bucket/file")

CLI更适合shell提示符,要获得更好的python API,请查看boto库。下面的例子展示了如何启动一个实例:http://boto.readthedocs.org/en/latest/ec2_tut.html

Boto3不具备cli所拥有的一切,因此您可能不得不在脚本中偶尔使用cli中的一些东西。例如,我在boto3中找不到aws部署推送的类比,所以这里是我如何从python脚本使用cli推送到s3。不过按照胡里奥的观点,我在其他地方都用boto。

import subprocess
cmd='aws deploy push --application-name SomeApp --s3-location  s3://bucket/Deploy/db_schema.zip --ignore-hidden-files' 
push=subprocess.Popen(cmd, shell=True, stdout = subprocess.PIPE)
print push.returncode

您可以在python脚本中使用subprocess来运行aws cli命令。例如,假设要获取s3遗愿清单。然后,

import subprocess
push=subprocess.call(['aws', 's3', 'ls', '--recursive', '--human-readable', '--summarize'])

import subprocess
push=subprocess.run(['aws', 's3', 'ls', '--recursive', '--human-readable', '--summarize'])

您可以在python中直接使用awscli

from awscli.clidriver import create_clidriver
cli_driver = create_clidriver()
result = cli_driver.main(args=["s3api", "list-buckets"])

这样可以触发命令,但结果将只包含返回代码。我还没有找到捕获该工具实际输出的方法。此外,如果出现问题,实例将退出。

所以,我不建议使用这个。只是想添加这个信息

Fix/example to answer of smokeny using sh.作为一个答案,因为我还不能评论和编辑不工作。

from sh import aws
aws("s3","cp","s3://folder/", ".", "--recursive", "--exclude", "*", "--include", "*.txt")

最新更新