1. 程式人生 > >python--讀取環境變數

python--讀取環境變數

轉載請註明出處:python–讀取環境變數

python中經常會通過環境變數來進行引數傳遞和環境配置。

本章記錄讀取環境變數的方案

設定環境變數

首先設定環境變數

$ export ENV_PORT=3333
$ echo $ENV_PORT
3333

方案一 os讀取

os直接讀取

使用os獲取環境變數字典

import os
os.getenv('ENV_PORT')
os.environ.get('ENV_PORT')
os.environ['ENV_PORT']

列印所有環境變數,遍歷字典

import os
env_dist = os.environ # environ是在os.py中定義的一個dict environ = {}
for key in env_dist:
    print key + ' : ' + env_dist[key]

通過檔案中轉環境變數

方法如下:

import os
import ConfigParser

cf = ConfigParser.ConfigParser()
cf.read('test.conf')

def resolveEnv(con):
    if con.startswith('ENV_'):
        return os.environ.get(con)
    return con

def main():
    host = resolveEnv(cf.get('db', 'host'))
    port = resolveEnv(cf.get('db', 'port'))

    print 'host:%s' % host
    print 'port:%s' % port

if __name__ == "__main__":
    main()

檢視一下配置檔案:

$ cat test.conf
[db]
host = 1.2.3.4
port = ENV_PORT

讀取配置檔案:

$ python test.py
host:1.2.3.4
port:3333

方案二pyhocon

pyhocon是一個python的配置管理庫

pyhocon的一個作用是可以直接在配置檔案中使用${}的方式引用,pyhocon解析時會自動實現如上resolveEnv的邏輯,對應環境變數。

官網如下:
https://github.com/chimpler/pyhocon

配置檔案如下:
default.conf

  databases {
    # MySQL
    active = true
    enable_logging = false
    resolver = null
    # you can use substitution with unquoted strings. If it it not found in the document, it defaults to environment variables
    home_dir = ${HOME} # you can substitute with environment variables
    "mysql" = {
      host = "abc.com" # change it
      port = 3306 # default
      username: scott // can use : or =
      password = tiger, // can optionally use a comma
      // number of retries
      retries = 3
    }
  }

${HOME}在解析使用解析時會自動獲取到環境變數中的HOME

使用方式

from pyhocon import ConfigFactory

conf = ConfigFactory.parse_file('samples/database.conf')
host = conf.get_string('databases.mysql.host')
same_host = conf.get('databases.mysql.host')
same_host = conf['databases.mysql.host']
same_host = conf['databases']['mysql.host']
port = conf['databases.mysql.port']
username = conf['databases']['mysql']['username']
password = conf.get_config('databases')['mysql.password']
password = conf.get('databases.mysql.password', 'default_password') #  use default value if key not found

轉載請註明出處:python–讀取環境變數