我使用以下代码临时修改环境变量。

@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解释器的其他地方引用了)。

最佳答案

_environ = dict(os.environ)  # or os.environ.copy()
try:

    ...

finally:
    os.environ.clear()
    os.environ.update(_environ)

关于environment-variables - Python-临时修改当前进程的环境,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2059482/

10-11 08:43