繁体   English   中英

在 Python 中缩短 os.getenv

[英]make shorter os.getenv in Python

import os

BUCKET = os.getenv("BUCKET")
IN_CSV = os.getenv("IN_CSV")
OUT_CSV = os.getenv("OUT_CSV")

现在,你看到问题了吗? 我不想重新输入两次变量名,有没有办法不这样做? 也许一些 function get_and_init_env。 get_and_init_env(BUCKET) 执行后应该有一个名为 BUCKET 的变量,其值为 os.getenv("BUCKET") 在 locals()

可能不完全是您所需要的,但为了节省输入在 ipython 上构建的东西的时间,我曾经制作了一个 class ,它接收字符串的字典(例如可以很容易地从os.environ制作的字符串),它是__init__它调用setattr使自己具有反映 dict 内容的属性。 从那里我只需要.blah那个实例而不是['blah']但更重要的是在 ipython 中可以.b<tab>并调出它可能的项目。 可能是这样的

...
class DotDict:
    def __init__(self,dictish):
        self._original = dict(dictish) #a dict has a lot of useful capabilities that can be routed to it...
        for x,y in self._original.items():
            setattr(self,CleanStr(x),y)
   ...

...
#make useful dicts part of the module
env =DotDict(os.environ)

...

from MyMod import env as env0
env0.BUCKET #just use it...

由于大多数环境变量应该非常干净,您可能只使用x而不是CleanStr(x)但确实应该有办法将任何 x object 变为有效名称,无论是 str 或 repr 还是 hash 相关并以一些喜欢的为前缀字符序列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM