我使用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")