首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >os.environ.setdefault()和os.environ.putenv()的区别是什么?

os.environ.setdefault()和os.environ.putenv()的区别是什么?
EN

Stack Overflow用户
提问于 2021-07-17 18:05:23
回答 1查看 1.6K关注 0票数 1

我的理解是,两者都应该设置环境变量。但是在django的manage.py文件中,这两者之间的切换会导致不同的结果。

代码语言:javascript
复制
>>> help(os.environ.putenv)
putenv(name, value, /)                                       
    Change or add an environment variable

如果编辑manage.py文件并将os.environ.setdefault更改为os.environ.putenv,将得到以下内容:

问题:为什么os.environ.setdefault在这种情况下工作,但os.environ.putenv不能工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-17 18:48:18

主要区别在于,os.environ.setdefaultos.environ视为python dict,而os.putenvos.environ.putenv则对环境进行更改,从而影响以os.system()os.popen()os.fork()os.execv()启动的子进程。os.putenv的文档说明了os.environos.putenv之间的关系

分配给os.environ中的项自动转换为对putenv()的相应调用;但是,对putenv()的调用不更新os.environ,因此实际上最好将其分配给os.environ项。

基于上述语句,使用os.putenv更新环境变量并不一定会更新os.environ字典。因此,这取决于环境变量是如何使用的。对于Django,使用以下代码在django/config/__init__.py文件中访问所讨论的环境变量:

代码语言:javascript
复制
settings_module = os.environ.get(ENVIRONMENT_VARIABLE)

显然,这一行将os.environ视为字典。由于使用os.putenv所做的更改不影响此os.environ字典,因此django无法找到设置模块(即settings_module变量等于None)。

总之,如果您想更新环境变量,那么使用os.environ['VARIABLE'] = 'VALUE'os.environ.setdefault就更具有包容性。因为,如前所述,更新os.environ既更新了字典,也调用了os.putenv

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68423096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档