簡體   English   中英

如何使用子進程模塊在 python 中運行 aws cli 命令

[英]How to run aws cli comands in python using subprocess module

我正在嘗試從 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 腳本來完成。

至於文檔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模塊,但什么困擾我的是,為什么你不希望使用boto3這是專門為從Python的發送API調用AWS寫入模塊。 我鼓勵你使用subprocess來發送這些請求,並切換到boto3 ,如果可能的話。

好吧,您可以嘗試以下命令。

import subprocess

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

或者

import subprocess

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

願對你有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM