Python:有没有办法设置env.在调用函数之前,然后恢复以前的环境



我的场景:

我有一个包含链接的变量。例如REMOTE_API = "http://<site>/api/a/b/c"此链接始终保持不变,因此可以将其视为常量。它被用于程序的许多部分。但是,程序中很少有部分需要更改链接,例如,仅当满足某些条件时才更改REMOTE_API = "http://<site>/api/<user_name>/a/b/c"。此条件由配置决定。文件可能会更改,恕不另行通知。

有没有办法在运行函数之前更改变量默认值,并在函数结束时切换回来?

例如

@prepare_env(<if condition is met>)
def func():
<...>
call_api(REMOTE_API) #  "http://<site>/api/<user_name>/a/b/c"
<...>
if __name__ == "__main__":
call_api_with_default(REMOTE_API) #  REMOTE_API = "http://<site>/api/a/b/c"
func() # codition is met REMOTE_API =  "http://<site>/api/<user_name>/a/b/c"
an_other_call_with_default(REMOTE_API) #  REMOTE_API = "http://<site>/api/a/b/c"

您可以编写一个函数,该函数接受一个函数并调用它,根据需要设置和恢复环境变量。例如:

#!/usr/bin/env python3
# content of env.py
import os
def call_with_env_var(f, var_name, var_value):
old_value = os.environ[var_name]
os.environ[var_name] = var_value
ret = f()
os.environ[var_name] = old_value
def print_var(name):
print(f'value of {name}: {os.environ[name]}')
if __name__ == '__main__':
print_var('HOME')
call_with_env_var(
lambda: print_var('HOME'),
'HOME',
'xyz'
)
print_var('HOME')

$ ./env.py                                
value of HOME: /home/etuardu
value of HOME: xyz
value of HOME: /home/etuardu
$ echo $HOME                              
/home/etuardu

相关内容

  • 没有找到相关文章

最新更新