aws команда cli при синтаксической ошибке python 3.8 - PullRequest
0 голосов
/ 06 августа 2020

Я хочу сохранить команду aws в переменной.

#!/usr/bin/python3

import subprocess

aa = (subprocess.check_output(['aws ce get-cost-and-usage --time-period Start=2020-08-01,End=2020-08-31 --granularity=DAILY  --metrics BlendedCost |grep Amount | awk '{ gsub('\"',''); print $2 }' | sed 's/.$//''], shell=True)).decode('ascii').strip()

print(aa)
  File "test.py", line 5
    aa = (subprocess.check_output(['aws ce get-cost-and-usage --time-period Start=2020-08-01,End=2020-08-31 --granularity=DAILY  --metrics BlendedCost |grep Amount | awk '{ gsub('\"',''); print $2 }' | sed 's/.$//''], shell=True)).decode('ascii').strip()
                                                                                                                                                                           ^
SyntaxError: invalid syntax

В чем проблема?

Ответы [ 2 ]

2 голосов
/ 06 августа 2020

У вас есть по крайней мере одна проблема в этом выражении:

'{ gsub('\"',''); print $2 }'

У вас есть строки в одинарных кавычках внутри строк в одинарных кавычках. Вы должны избегать внутренних или удваивать их. Не то, чтобы ваша удвоенная строка служит только как одиночная.

'{ gsub(\'\"\',\'\'); print $2 }'

'{ gsub(''\"'',""); print $2 }'

Обратите внимание, что во второй строке я преобразовал вашу пустую строку в двойные кавычки; это экономит один экземпляр побега.

1 голос
/ 06 августа 2020

Вы можете проверить следующую форму:

#!/usr/bin/python3

import subprocess

cmd = "aws ce get-cost-and-usage --time-period Start=2020-08-01,End=2020-08-31 --granularity=DAILY  --metrics BlendedCost --profile la |  grep Amount | awk '{ gsub(\"\\\"\",\"\"); print $2 }' |  sed 's/.$//'"

print(cmd)

aa = subprocess.check_output([cmd], shell=True).decode('ascii').strip()

print(aa)

print(cmd) дает:

aws ce get-cost-and-usage --time-period Start=2020-08-01,End=2020-08-31 --granularity=DAILY  --metrics BlendedCost --profile la |  grep Amount | awk '{ gsub("\"",""); print $2 }' |  sed 's/.$//'

Я не могу подтвердить, действительно ли команда работает, но синтаксиса нет ошибка минимум.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...