Как запустить команды aws cli в python с помощью модуля подпроцесса - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь запустить очень простую команду CLI AWS из python вместо использования boto3

Так что я нашел один ответ из-за переполнения стека, я пытался это сделать, но это не помогло, я неЯ не хочу использовать boto3, ниже приведен мой код, который я пробовал

import subprocess

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

Если я запускаю эти команды в скриптах bash, все работает отлично.Но у меня есть ограничение, что это должно быть сделано только с использованием сценариев Python.

1 Ответ

1 голос
/ 06 марта 2019

Как указано в документации для 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, который специально написан для отправки вызовов API в AWS из Python. Я не рекомендую вам использовать subprocess для отправки этих запросов и переключиться на boto3, если это возможно.

...