Python - temporarily modify the current process#39;s environment(Python - 临时修改当前进程的环境)
问题描述
我使用以下代码临时修改环境变量.
I use the following code to temporarily modify environment variables.
@contextmanager
def _setenv(**mapping):
"""``with`` context to temporarily modify the environment variables"""
backup_values = {}
backup_remove = set()
for key, value in mapping.items():
if key in os.environ:
backup_values[key] = os.environ[key]
else:
backup_remove.add(key)
os.environ[key] = value
try:
yield
finally:
# restore old environment
for k, v in backup_values.items():
os.environ[k] = v
for k in backup_remove:
del os.environ[k]
这个with
上下文主要用在测试用例中.例如,
This with
context is mainly used in test cases. For example,
def test_myapp_respects_this_envvar():
with _setenv(MYAPP_PLUGINS_DIR='testsandbox/plugins'):
myapp.plugins.register()
[...]
我的问题:有没有一种简单/优雅的方式来编写 _setenv
?我考虑过实际执行 backup = os.environ.copy()
然后 os.environ = backup
.. 但我不确定这是否会影响程序行为(例如:如果 os.environ
在 Python 解释器的其他地方被引用).
My question: is there a simple/elegant way to write _setenv
? I thought about actually doing backup = os.environ.copy()
and then os.environ = backup
.. but I am not sure if that would affect the program behavior (eg: if os.environ
is referenced elsewhere in the Python interpreter).
推荐答案
_environ = dict(os.environ) # or os.environ.copy()
try:
...
finally:
os.environ.clear()
os.environ.update(_environ)
这篇关于Python - 临时修改当前进程的环境的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Python - 临时修改当前进程的环境


基础教程推荐
- 何时使用 os.name、sys.platform 或 platform.system? 2022-01-01
- 如何让 python 脚本监听来自另一个脚本的输入 2022-01-01
- 如何在海运重新绘制中自定义标题和y标签 2022-01-01
- 线程时出现 msgbox 错误,GUI 块 2022-01-01
- 使用PyInstaller后在Windows中打开可执行文件时出错 2022-01-01
- Python kivy 入口点 inflateRest2 无法定位 libpng16-16.dll 2022-01-01
- 筛选NumPy数组 2022-01-01
- 在 Python 中,如果我在一个“with"中返回.块,文件还会关闭吗? 2022-01-01
- Dask.array.套用_沿_轴:由于额外的元素([1]),使用dask.array的每一行作为另一个函数的输入失败 2022-01-01
- 用于分类数据的跳跃记号标签 2022-01-01