Сохранять отступы YAML при печати содержимого файла в этот YAML (используя сценарии bash) - PullRequest
2 голосов
/ 15 марта 2019

Мне нужно напечатать содержимое файла Python в файл YAML, без ошибок в отступе файла YAML.Часть файла YAML, которая делает это, представляет собой описание команд, которые будут переданы в сценарий Bash, поэтому нам нужно выполнить это с помощью синтаксиса сценария Bash .Например, следующий жесткий код работает.Обратите внимание, как строка "cat" выводит содержимое файла script.py с соответствующим отступом:

enter image description here

Хитрость заключается в получении этого формата, когдапытаясь прочитать Python из другого файла.Фактически, чтобы создать этот скриншот, мне нужно было зайти в файл после его создания и добавить несколько пробелов, чтобы он выглядел правильно.После того, как я добавил пробелы, файл работал как задумано.Вот как выглядит неправильный вывод ДО того, как я вручную его отредактирую:

enter image description here

Интересно, что первая строка питона (зеленая стрелка) начинается с правильнойлиния.Но остальные строки расположены вдоль левого поля и являются неправильными (красная стрелка).

Вот код, который я использую для получения своего кода (в script.py) в buildspec:

Примечание: $ {Script} является ссылкой на мой файл script.py.Эта переменная устанавливается в другом месте файла.

version: 0.2
phases:
  install:
    commands:
      - apt-get update -y
  build:
    commands:
      - git config --global credential.helper '!aws codecommit credential-helper $@'
      - git config --global credential.UseHttpPath true
      - |
        cat >> scrypt.py <<EOL
        ${Script}
        EOL

1 Ответ

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

Таким образом, проблема заключалась в том, что функция! Include, которая помещала содержимое файла script.py вместо $ {Script}, не заботилась о том, что мы находимся в файле YAML, поэтому всякий раз, когда появляется новая строка, она простобросьте их полностью влево.

Было два пути решения этой проблемы.Во-первых, мы могли бы просто добавить пробелы в сам скрипт.py, поэтому, когда его значение подставляется в $ {Script}, они попадают в нужное место.

То, что мы в итоге сделали (так как первый путь былдовольно хакерский и сложный в обслуживании) просто отказаться от попыток! включить файл и просто вставить буквально все содержимое script.py в YAML-файл, именно там, где изначально находился $ {Script}.Так что результат выглядел так:

version: 0.2
phases:
  install:
    commands:
      - apt-get update -y
  build:
    commands:
      - git config --global credential.helper '!aws codecommit credential-helper $@'
      - git config --global credential.UseHttpPath true
      - pip3 install --quiet boto3
      - pip3 install --quiet GitPython
      - |
        cat > script.py <<EOL
        import boto3
        import git
        etc. etc. etc.
        EOL
      - python script.py
...