在絕大多數情況下,如果需要在程序運行過程中設置環境變量,使用os.environ.setdefault函數是沒有任何問題的,但是有兩種場景下setdefault會造成意外的問題,需要慎用:
如果程序執行前,系統里已經存在了某環境變量(如ENV=VAL1),此時如果在程序中用setdefault函數對該環境變量設置另一個不同的值(如VAL2),會因為setdefault函數的特性導致無法設置為新值
也是因為上述這一點,如果進程A先設置了環境變量(如ENV=VAL1),而A啟動了子進程B,子進程B會繼承A進程的所有與環境變量,會導致B運行的時候,程序運行環境里已經存在環境變量ENV,導致如果此時用setdefault函數對該環境變量設置另一個不同的值(如VAL2),也會因為同樣的原因導致無法設置為新值
因此,在程序運行中設置系統環境變量的最安全方法還是:
os.environ['ENV'] = 'VAL'
python 獲取系統環境變量 os.environ and os.putenv
從一段code說起 “if "BATCH_CONFIG_INI" in os.environ:” 判斷環境變量的值有沒有定義
如果定義的話就去環境變量的值,否則就取當前目錄下的config.ini文件。
復制代碼
if "BATCH_CONFIG_INI" in os.environ:
print "Using custom ini file!"
self.inifile = os.environ["BATCH_CONFIG_INI"]
else:
self.inifile = self.cur_file_dir() + "/config.ini"
self.db_print ("inifile = (%s)" %(self.inifile))
復制代碼
用Python Shell設置或獲取環境變量的方法:
一、設置系統環境變量
1、os.environ['環境變量名稱']='環境變量值' #其中key和value均為string類型
2、os.putenv('環境變量名稱', '環境變量值')
二、獲取系統環境變量
1、os.environ['環境變量名稱']
2、os.getenv('環境變量名稱')
celery中創建客戶端的文件main:
from celery import Celery
import os
# 配置celery如果需要用配置文件時去那里加載
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings.dev")
# 1.創建celery客戶端
celery_app = Celery('')
# 2.加載配置信息
celery_app.config_from_object('celery_tasks.config')
# 3.注冊異步任務(那些任務可以進入到任務隊列)
celery_app.autodiscover_tasks(['celery_tasks.sms', 'celery_tasks.email', 'celery_tasks.html'])