将 YAML 文件中的列表传递给 python

Posted

技术标签:

【中文标题】将 YAML 文件中的列表传递给 python【英文标题】:Pass a list from YAML file to python 【发布时间】:2019-06-27 04:06:40 【问题描述】:

我正在使用带有 python 3.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')

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

【问题讨论】:

环境变量是纯文本,所以你必须自己“发明”数据结构 【参考方案1】:

环境变量是文本,因此仅使用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')

【讨论】:

以上是关于将 YAML 文件中的列表传递给 python的主要内容,如果未能解决你的问题,请参考以下文章

无法将环境变量传递给 azure 管道 yaml 中的 powershell 脚本(非内联)

将变量和列表传递给 Python 中的函数

将HTML表单变量传递给Django中的python函数

如何将 gitlab ci/cd 变量传递给 kubernetes(AKS) deployment.yaml

如何将列表保存到临时目录中的泡菜文件并将该文件传递给函数?

如何从 python 中的嵌套 YAML 文件中读取数据?