主要区别在于os.environ.setdefault
将os.environ
其视为 python dict
,而os.putenv
或对影响以、或和os.environ.putenv
开头的子进程的环境进行更改。文档说明了以下关于和之间的关系:os.system()
os.popen()
os.fork()
os.execv()
os.putenv
os.environ
os.putenv
对 in 项的赋值os.environ
会自动转换为对 putenv() 的相应调用;但是,调用putenv()
不更新os.environ
,因此实际上最好分配给 os.environ 的项目。
根据上面的说法,更新环境变量os.putenv
并不一定会更新os.environ
字典。因此,它归结为如何使用相关环境变量。在 的情况下,使用以下代码行在文件Django
中访问相关环境变量:django/config/__init__.py
settings_module = os.environ.get(ENVIRONMENT_VARIABLE)
显然,这条线被os.environ
视为字典。由于使用所做的更改os.putenv
不会影响此os.environ
字典,django
因此无法找到设置模块(即settings_module
变量等于None
)。
总而言之,如果你想更新环境变量,使用os.environ['VARIABLE'] = 'VALUE'
or更加包容os.environ.setdefault
。因为,如上所述,更新os.environ
两者都会更新字典并调用os.putenv
.