【发布时间】:2011-01-04 19:02:46
【问题描述】:
我使用以下代码临时修改环境变量。
@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 上下文主要用于测试用例。例如,
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 解释器的其他地方引用)。
【问题讨论】:
标签: environment-variables python