我使用列表作为Python程序的一部分,并希望将其转换为环境变量。
所以,就像这样:
list1 = ['a.1','b.2','c.3']
for items in list1:
alpha,number = items.split('.')
print(alpha,number)
正如预期的那样给了我:
a 1
b 2
c 3
但是当我尝试将其设置为环境变量时,如:
export LIST_ITEMS = 'a.1', 'b.2', 'c.3'
并且做:
list1 = [os.environ.get("LIST_ITEMS")]
for items in list1:
alpha,number = items.split('.')
print(alpha,number)
我收到错误:ValueError: too many values to unpack
如何修改我传递列表的方式,或者获取它以使我具有与不使用env变量相同的输出?
答案 0 :(得分:11)
如果您希望在环境变量中构建数据,我建议使用JSON。 JSON很容易编写/读取,可以写成一行,解析器存在,开发人员知道它。
要测试,请在shell中执行:
case
要在同一个shell中执行的Python代码:
$ export ENV_LIST_EXAMPLE='["Foo", "bar"]'
给出
import os
import json
env_list = json.loads(os.environ['ENV_LIST_EXAMPLE'])
print(env_list)
print(type(env_list))
您对cfg_load
答案 1 :(得分:7)
我不确定你为什么要通过环境变量来做,但你可以这样做:
export LIST_ITEMS ="a.1 b.2 c.3"
在Python中:
list1 = [i.split(".") for i in os.environ.get("LIST_ITEMS").split(" ")]
for k, v in list1:
print(k, v)
答案 2 :(得分:4)
environs PyPI包很好地处理了我的用例:从env var加载单个设置并将其强制转换为列表,整数等:
from environs import Env
env = Env()
env.read_env() # read .env file, if it exists
# required variables
gh_user = env("GITHUB_USER") # => 'sloria'
secret = env("SECRET") # => raises error if not set
# casting
max_connections = env.int("MAX_CONNECTIONS") # => 100
ship_date = env.date("SHIP_DATE") # => datetime.date(1984, 6, 25)
ttl = env.timedelta("TTL") # => datetime.timedelta(0, 42)
# providing a default value
enable_login = env.bool("ENABLE_LOGIN", False) # => True
enable_feature_x = env.bool("ENABLE_FEATURE_X", False) # => False
# parsing lists
gh_repos = env.list("GITHUB_REPOS") # => ['webargs', 'konch', 'ped']
coords = env.list("COORDINATES", subcast=float) # => [23.3, 50.0]
答案 3 :(得分:1)
如果要使用该格式设置环境变量,则可以使用:
from ast import literal_eval
list1 = [literal_eval(e.strip()) for e in os.environ["LIST_ITEMS"].split(',')]
for item in list1:
alpha,number = item.split('.')
print alpha, number
输出:
a 1
b 2
c 3