29

我正在使用带有 awscli 的 aws ec2 服务。现在我想将我在控制台中输入的所有命令放入一个 python 脚本中。我看到如果我import awscli在 python 脚本中编写它可以正常工作,但我不明白如何在脚本中使用它。例如,我如何aws ec2 run-instances <arguments>在 python 脚本中执行命令import awscli?只是为了说清楚,我不是在寻找类似的解决方案os.system('aws ec2 run-instances <arguments>'),我在寻找类似的东西

import awscli
awscli.ec2_run-instances(<arguments>)
4

4 回答 4

25

您可以使用出色的sh包来做到这一点。你可以模仿 python 包,用 sh 为你包装。

import sh
s3 = sh.bash.bake("aws s3")
s3.put("file","s3n://bucket/file")
于 2014-08-15T13:54:43.017 回答
18

CLI 将更适合 shell 提示符,要获得更好的 python API,请检查 boto 库。此示例显示如何启动实例:http ://boto.readthedocs.org/en/latest/ec2_tut.html

于 2014-05-21T12:05:03.683 回答
16

Boto3 没有 cli 的所有功能,因此您可能不得不在脚本中使用 cli 中的某些内容。例如,我在 boto3 中找不到 aws deploy push 的模拟,所以这里是我如何使用 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
于 2016-07-20T14:35:21.400 回答
2

好吧,您可以aws cli通过subprocess在 python 脚本中使用来运行命令。例如,假设获取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'])

希望对你有所帮助。

于 2020-12-02T19:07:23.173 回答