How to pass a list as an environment variable?

后端 未结 4 2079
猫巷女王i
猫巷女王i 2021-02-07 01:52

I use a list as part of a Python program, and wanted to convert that to an environment variable.

So, it\'s like this:

list1 = [\'a.1\',\'b.2\',\'c.3\']
         


        
相关标签:
4条回答
  • 2021-02-07 02:36

    The environs PyPI package handles my use case well: load a single setting from env var and coerce it to a list, int, etc:

    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]
    
    0 讨论(0)
  • 2021-02-07 02:38

    I'm not sure why you'd do it through the environment variables, but you can do this:

    export LIST_ITEMS ="a.1 b.2 c.3"
    

    And in Python:

    list1 = [i.split(".") for i in os.environ.get("LIST_ITEMS").split(" ")] 
    
    for k, v in list1:
        print(k, v)
    
    0 讨论(0)
  • 2021-02-07 02:43

    If you want to set the environment variable using that format, this would work:

    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
    

    Output:

    a 1
    b 2
    c 3
    
    0 讨论(0)
  • 2021-02-07 02:55

    The rationale

    I recommend using JSON if you want to have data structured in an environment variable. JSON is simple to write / read, can be written in a single line, parsers exist, developers know it.

    The solution

    To test, execute this in your shell:

    $ export ENV_LIST_EXAMPLE='["Foo", "bar"]'
    

    Python code to execute in the same shell:

    import os
    import json
    
    env_list = json.loads(os.environ['ENV_LIST_EXAMPLE'])
    print(env_list)
    print(type(env_list))
    

    gives

    ['Foo', 'bar']
    <class 'list'>
    

    Package

    Chances are high that you are interested in cfg_load

    0 讨论(0)
提交回复
热议问题