如何检查 OS 变量并使用与列表中的 Python 变量同名的变量

How to check OS variables and use them with same name as Python variable from a list

希望我能正确解释我正在尝试做的事情。我想检查列表中给出的变量是否存在于 OS 中,如果存在,则在 python.

中使用相同的 OS 变量名称和值

这就是我现在的做法,但我认为这是很多代码,如果需要更多 os 变量,我会更大。那么,如何才能更聪明、更高效地开展这项工作呢?

OS (linux) 个变量

export WEB_URL="https://google.com"
export WEB_USERNAME="Foo"
export WEB_PASSWORD="Bar"
# Check os env variables
if "WEB_URL" in os.environ:
    web_url = os.environ.get("WEB_URL")
else:
    logger.error("No URL os env find please check")

if "WEB_USERNAME" in os.environ:
    web_username = os.environ.get("WEB_USERNAME")
else:
    logger.error("No USERNAME os env find please check")

if "WEB_PASSWORD" in os.environ:
    web_password = os.environ.get("WEB_PASSWORD")
else:
    logger.error("No PASSWORD os env find please check")

一定要这样开头吗?

os_variables = ["WEB_URL", "WEB_USERNAME", "WEB_PASSWORD"]

for var in os_variables:
    if var in os.environ:
        print(var.lower(), "=", os.environ.get(f"{var}"))

结果:

web_url = https://google.com
web_username = Foo
web_password = Bar

所以上面打印的应该是变量,只是为了说明我的意思

如果我正确理解您的问题,您将需要使用 eval() and exec()。也许沿着这些路线:

exec(str(eval(var.lower(), "=", "'", os.environ.get(f"{var}")"'")))

首先评估应该会给你类似 web_url = 'https://google.com' 的结果。如果将其转换为字符串,则可以执行,但在这种情况下要注意全局和局部变量。

作为妥协,我终于想出了这个解决方案

env_variables = ('WEB_URL', 'WEB_USERNAME', 'WEB_PASSWORD')


def check_env(var):
    for var in env_variables:
        if var in os.environ:
            if os.environ[var] == "":
                logging.error(f'{var} is empty, please set a value')
                sys.exit()
        else:
            logging.error(
                f'{var} does not exist, please setup this env variable')
            sys.exit()


check_env(env_variables)