简体   繁体   中英

make shorter os.getenv in Python

import os

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

now, you see the problem right? I don't want to retype the variable name twice, is there a way to not do it? maybe some function get_and_init_env. get_and_init_env(BUCKET) after this is executed there should be a variable of name BUCKET with value os.getenv("BUCKET") in locals()

May not be exactly what you need but to save time typing in things built on ipython, I once made a class that took in a dict of strings (such as one that can easily be made from os.environ ), and in it's __init__ it called setattr to make itself have attributes that reflected the dict contents. From there I just had to .blah that instance instead of ['blah'] but more importantly in ipython could .b<tab> and bring up the items it could be. Probably went something like

...
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...

Since most environ vars should be pretty clean, you can probably just use x instead of CleanStr(x) but should really have a way to make any x object into a valid name, be it str or repr or hash related and prefixed by some favorite character sequence.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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