如何检查 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)
希望我能正确解释我正在尝试做的事情。我想检查列表中给出的变量是否存在于 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)