Передать список из файла YAML в python - PullRequest
0 голосов
/ 03 февраля 2019

Я создаю веб-приложение, используя движок приложения googles со стандартной средой python 3.7.Я передаю значения из файла app.yaml в мой основной скрипт, однако я не могу передать список из файла yaml в основной файл.

Вот мой файл app.yaml:

runtime: python37

handlers:
  # This configures Google App Engine to serve the files in the app's static
  # directory.
- url: /static
  static_dir: static


env_variables:
  USERS: 'myemail@email.com'
  USERS2: ['myemai@email.com', 'youremail@email.com']
  USERS3:
  - 'myemail@email.com'
  - 'youremail@email.com'
  USERS4:
    - 'myemail@email.com'
    - 'youremail@email.com'

Вот мой скрипт на python:

import os

users = os.environ.get('USERS')
users2 = os.environ.get('USERS2')
users3 = os.environ.get('USERS3')
users4 = os.environ.get('USERS4')

Переменная user возвращает 'myemail@email.com' правильно.Однако users2, users3 и users4 все возвращают [] (пустой список).

1 Ответ

0 голосов
/ 03 февраля 2019

Переменные окружения являются текстовыми, поэтому просто получить их с помощью os.environ не получится.

Вы утверждаете, что получаете пустые списки, но я подозреваю, что вы на самом деле получаете пустую строку.В Python 3.7 os.py нет ничего похожего на преобразование строки в (пустой) список.

На самом деле app.yaml не может обрабатывать последовательности в YAML, которые он получает, это может сделать что-то вроде объединения записей последовательности с разделительным символом.В любом случае USERS3 и USERS4 абсолютно одинаковы, только разные отступы (последовательность для USERS2, конечно, отличается)

Я предлагаю вам сделать это выше, но при этом пропустить лишние кавычки вваш YAML:

runtime: python37

handlers:
  # This configures Google App Engine to serve the files in the app's static
  # directory.
- url: /static
  static_dir: static


env_variables:
  USERS: myemail@email.com
  USERS2: myemai@email.com:youremail@email.com
  USERS3: myemail@email.com:youremail@email.com
  USERS4: myemail@email.com:youremail@email.com

А затем в вашем Python выполните

import os

def listified_env(k):
    x = os.environ.get(k)
    if ':' in x:
        return x.split(':')
    return x

users = listified_env('USERS')
users2 = listified_env('USERS2')
users3 = listified_env('USERS3')
users4 = listified_env('USERS4')
...