如何使用子流程模块在python中运行aws cli命令
我试图从python运行一个非常基本的AWS CLI命令,而不是使用boto3 所以我从堆栈溢出中找到了一个答案,我试过了,但没有做得更好,我不想使用bot3,下面是我试过的代码如何使用子流程模块在python中运行aws cli命令,python,amazon-s3,aws-sdk,boto3,aws-cli,Python,Amazon S3,Aws Sdk,Boto3,Aws Cli,我试图从python运行一个非常基本的AWS CLI命令,而不是使用boto3 所以我从堆栈溢出中找到了一个答案,我试过了,但没有做得更好,我不想使用bot3,下面是我试过的代码 import subprocess cmd='aws s3 ls' push=subprocess.Popen(cmd, shell=True, stdout = subprocess.PIPE) print push.returncode 如果我将这些命令运行到bash脚本中,它将非常好地工作。但是我有一个限制,
import subprocess
cmd='aws s3 ls'
push=subprocess.Popen(cmd, shell=True, stdout = subprocess.PIPE)
print push.returncode
如果我将这些命令运行到bash脚本中,它将非常好地工作。但是我有一个限制,那就是它只能使用python脚本来完成。作为状态的文档,。returncode
存储子进程返回代码。运行代码后,我看到以下输出:
ania@blabla:~$ python3 test.py
None
ania@blabla:~$
[Errno 32] Broken pipe
再次检查上述单据:
None
值表示进程尚未终止
因此,让我们修改代码以等待子进程结束(我使用的是Python 3):
现在,在输出中,我得到退出状态0:
ania@blabla:~$ python3 test.py
0
这是关于
子流程
模块问题的建议,但困扰我的是为什么您不想使用boto3
模块,它是专门为从Python向AWS发送API调用而编写的。如果可能的话,我建议您不要使用子流程
发送这些请求并切换到boto3
。您可以尝试以下命令
import subprocess
push=subprocess.call(['aws', 's3', 'ls', '--recursive', '--human-readable', '--summarize'])
或
希望为您提供帮助。您介意我问您为什么希望从Python运行AWS CLI吗?实际上,我正在尝试运行一些东西,我知道如何使用AWS CLI命令,但不知道如何使用Python,因此我只想学习在pythons中运行CLI命令的任何方法,正因为如此,我将AWS 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'])