![](/img/trans.png)
[英]os.getenv(“username”) not returning environment variable instead my name
[英]Reducing variable name duplication when using os.getenv
我经常发现自己在下面的样式中编写重复感觉代码(因为它发生在Django settings.py
,但这个问题意味着更普遍):
STACKEXCHANGE_CLIENT_ID = os.getenv('STACKEXCHANGE_CLIENT_ID')
STACKEXCHANGE_CLIENT_SECRET = os.getenv('STACKEXCHANGE_CLIENT_SECRET')
# et cetera
当然,在很多情况下我不希望我的本地变量名称与环境变量的名称相匹配,但它发生得足够多,我想知道是否有一种避免名称重复的好方法。
以下代码适用于我:
_locals = locals()
def f(x):
_locals[x] = os.getenv(x)
f('TERM')
print TERM
但是我无意在生产中使用它,因为引用了locals()
上的Python文档 :
注意:不应修改此词典的内容;
所以我想知道是否存在有效的“支持”/“批准”解决方案,如果是,它可能是什么样子?
import sys, os
opts = (
'STACKEXCHANGE_CLIENT_ID',
'STACKEXCHANGE_CLIENT_SECRET'
)
module = sys.modules[__name__]
for o in opts:
setattr(module, o, os.getenv(o))
在引用的答案的评论中,它链接到另一个表明globals()
可靠直接更新......
_g = globals()
for o in opts:
_g[o] = os.getenv(o)
我想,这部分是一个品味的问题,但我倾向于将这些放在字典中,所以:
STACKEXCHANGE_CLIENT_ID = os.getenv('STACKEXCHANGE_CLIENT_ID')
STACKEXCHANGE_CLIENT_SECRET = os.getenv('STACKEXCHANGE_CLIENT_SECRET')
会成为:
envars['STACKEXCHANGE_CLIENT_ID'] = os.getenv('STACKEXCHANGE_CLIENT_ID')
envars['STACKEXCHANGE_CLIENT_SECRET'] = os.getenv('STACKEXCHANGE_CLIENT_SECRET')
或者,您可以直接使用os.environ
字典。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.