Python 3.x 将列表从YAML文件传递到python

Python 3.x 将列表从YAML文件传递到python,python-3.x,app.yaml,Python 3.x,App.yaml,我正在使用GooglesAppEngine和Python3.7标准环境创建一个web应用程序。我正在将值从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

我正在使用GooglesAppEngine和Python3.7标准环境创建一个web应用程序。我正在将值从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')

变量users返回
'myemail@email.com“
正确。但是,
users2
users3
users4
都返回
[]
(一个空列表)

环境变量是文本,因此仅使用
os.environ
获取它们是行不通的

你声称你得到的是空列表,但我怀疑你实际上得到的是一个空字符串。Python3.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')

环境变量是纯文本,因此您必须自己“发明”数据结构