часть вывода, записанная terragrunt, не найдена в stdout или stderr при чтении с использованием подпроцесса python - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь прочитать вывод команды terragrunt в реальном времени в моем скрипте python, используя подпроцесс.Это работает хорошо и дает мне весь вывод в реальном времени, однако, я пропустил блок вывода, который выглядит как выходной из terraform.Это вывод, который содержит план / применить / уничтожить конкретные детали.Я могу видеть все выходные данные до и после этого блока.Чего мне здесь не хватает?

Отсутствует блок вывода

------------------------------------------------------------------------

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  ~ aws_alb.alb_name
      tags.Name:                          "x" => "y"

  ~ aws_alb_target_group.name
      lambda_multi_value_headers_enabled: "" => "false"
      tags.Name:                          "x" => "y"


Plan: 0 to add, 2 to change, 0 to destroy.

------------------------------------------------------------------------

Скрипт Bash для запуска команды terragrunt

#!/bin/bash
action=$1
environment=$2
module=$3

cd ../../$environment
cd `find . -name $module -type d`

tg_plan_output="$(terragrunt plan-all --terragrunt-non-interactive --detailed-exitcode --terragrunt-source-update -lock=false)"

Скрипт Python, который вызывает скрипт bash и печатаетвывод в реальном времени

import subprocess

process = subprocess.Popen(['bash', 'script.sh', 'plan', 'env_name', 'module_name'], cwd='path_to_script', stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)

while True:
    try:
        output = process.stdout.readline()
        print(output)
    except OSError as error:
        if e.errno != errno.EIO: raise
        output = ""
    if not output: break        
...