【问题标题】:How to run aws cli comands in python using subprocess module如何使用子进程模块在 python 中运行 aws cli 命令
【发布时间】:2019-07-27 23:29:01
【问题描述】:

我正在尝试从 python 运行一个非常基本的 AWS CLI 命令,而不是使用 boto3

所以我从堆栈溢出中找到了一个答案,我尝试过,但效果并没有更好,我不想使用 boto3,下面是我尝试过的代码

import subprocess

cmd='aws s3 ls'
push=subprocess.Popen(cmd, shell=True, stdout = subprocess.PIPE)
print push.returncode

如果我将这些命令运行到 bash 脚本中,它可以正常工作。但我有一个限制,它只能使用 python 脚本来完成。

【问题讨论】:

  • 您介意我问为什么您希望从 Python 运行 AWS CLI 吗?

标签: python amazon-s3 aws-sdk boto3 aws-cli


【解决方案1】:

正如subprocess.Popen 的文档所述,.returncode 存储子进程返回码。运行您的代码后,我看到了以下输出:

ania@blabla:~$ python3 test.py 
None
ania@blabla:~$ 
[Errno 32] Broken pipe

再次检查上述文档:

None 值表示进程尚未终止。

所以让我们修改你的代码以等待子进程结束(我使用的是 Python 3):

import subprocess

cmd='aws s3 ls'
push=subprocess.Popen(cmd, shell=True, stdout = subprocess.PIPE)
push.wait()   # the new line
print(push.returncode)

现在,在输出中我得到了退出状态 0:

ania@blabla:~$ python3 test.py 
0

这是关于 subprocess 模块问题的建议,但令我困扰的是为什么您不想使用专门为从 Python 向 AWS 发送 API 调用而编写的 boto3 模块。我不鼓励您使用subprocess 发送这些请求并尽可能切换到boto3

【讨论】:

  • 实际上我正在尝试运行一些我知道如何使用 aws cli 命令但不使用 python 的东西,所以我只想学习在 pythons 中运行 cli 命令的任何方法,因为我把aws s3 ls的简单命令
  • 好吧,我希望我的回答对当时有帮助。如果它解决了您的问题,您可以将其标记为已接受。
【解决方案2】:

嗯,你可以试试下面的命令。

import subprocess

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

import subprocess

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

希望对你有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    相关资源
    最近更新 更多