我正在使用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'
。虽然users2
,users3
和users4
都返回[]
(一个空列表)。
答案 0 :(得分:0)
环境变量是文本,因此仅使用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')