Преобразовать команду в подпроцесс - PullRequest
0 голосов
/ 14 июля 2020

Сейчас у меня есть следующее:

tf = Terraform()
tf.init()
tf.plan(capture_output=False)
approve = {"auto-approve": True}
print(tf.apply(capture_output=False, auto_approve=True, skip_plan=True,**approve))

Это работает достаточно хорошо, но мне нужно поместить его в подпроцесс. Я пробовал следующее:

tf = Terraform()
tf.init()
tf.plan(capture_output=False)
approve = {"auto-approve": True}
subprocess.check_output(['tf.apply','capture_output','0', 'auto_approve','1', 'skip_plan','1','**approve'])

Однако я получаю сообщение об ошибке: «'tf.apply' не распознается как внутренняя или внешняя команда, работающая программа или командный файл.»

Могу ли я преобразовать вышеуказанное в подпроцесс? И если да, то как?

1 Ответ

1 голос
/ 14 июля 2020

subprocess выполняет внешние команды. Напротив, вы пытаетесь выполнить что-то вроде (но не совсем) кода Python. Это принципиально не может работать.

Что вы можете сделать, так это создать сценарий Python, содержащий ваш код Terraform, и выполнить этот через subprocess.check_output. Однако это работает, только если сценарий Python является завершенным . Вы не можете просто выполнить фрагмент, как в вашем случае.

Для минимального примера того, что вы можете сделать, возьмите исходный сценарий, сохраните его как tf.py и выполните как это в Python:

subprocess.check_output(['python', 'tf.py'])
...