将列表从YAML文件传递到python

时间:2019-02-03 00:19:05

标签: python-3.x app.yaml

我正在使用python 3.7标准环境的Google应用程序引擎创建一个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')

变量用户正确返回'myemail@email.com'。虽然users2users3users4都返回[](一个空列表)。

1 个答案:

答案 0 :(得分:0)

环境变量是文本,因此仅使用os.environ获取它们是不会起作用的。

您声称自己得到的是空列表,但我怀疑您实际上得到的是空字符串。 Python 3.7的os.py中没有什么可以做的,就像将字符串转换为(空)列表一样。

实际上,app.yaml似乎无法处理它所获得的YAML中的序列,它可以执行类似将序列条目与分隔符连接起来的操作。无论如何,USERS3USERS4完全相同,只是缩进不同(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')