当前位置: 首页 > 面试题库 >

Python-临时修改当前进程的环境

严心水
2023-03-14
问题内容

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

@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)


 类似资料:
  • 问题内容: 我相信在环境稍有修改的情况下运行外部命令是很常见的情况。这就是我倾向于这样做的方式: 我感觉到有更好的办法了。看起来还好吗? 问题答案: 我认为如果你不打算为当前过程修改会更好:

  • 问题内容: 在我的Python测试脚本中,我多次使用此模式: 有没有更简洁的方法来临时修改搜索路径? 问题答案: 您可以使用一个简单的上下文管理器: 然后要导入模块,您可以执行以下操作: 从语句主体退出时,将恢复到原始状态。如果仅使用该块中的模块,则可能还希望从以下位置删除其引用:

  • 问题内容: 是否可以更改当前过程的环境变量? 在Python脚本更具体地说我想改变,这样在模块“X”依赖于一些进口,从我给出的路径采取的LD_LIBRARY_PATH 还有其他方法可以动态更改从库加载位置的路径吗? 编辑 :我想我需要提及的是,我已经尝试过类似os.environ [“ LD_LIBRARY_PATH”] = mypath os.putenv(’LD_LIBRARY_PATH’,m

  • 问题内容: 我想知道是否可以编辑循环中正在处理的当前对象 我正在处理一系列对象,我想遍历数据库中查找与该问题对象相关的答案。因此,对于每一个问题去获取答案对象,并更新当前 里面 我的循环,这样我可以输出/别处过程。 问题答案: 有两种方法 这样可以保存密钥,因此您可以在主变量中再次对其进行更新 要么 添加会保持更新。但我想说,即使这样比较短,也建议使用第一个(请参阅Paystey的评论) 根据PH

  • 本文向大家介绍ubuntu临时或永久修改hostname的方法,包括了ubuntu临时或永久修改hostname的方法的使用技巧和注意事项,需要的朋友参考一下 当前ubuntu版本是14.04: 查看hostname 通过GNOME终端连接ubuntu以后,在命令提示符中可以直接看到主机名,主机名通常位于@符号后,如:root@myvs10d31。也可以在终端中通过命令:hostname 或 un

  • 问题内容: 我正在尝试使用for循环修改列表中的项目,但出现错误(请参见下文)。样例代码: 错误: 有什么办法解决这个问题? 问题答案: 尝试以下方法: 您遇到的基本问题是,当你写的,有是一个列表,则需要是一个整数,数字索引列表。但是在循环中 是列表中的实际事物,即字符串,而不是事物的数字索引。是一个迭代器,它生成数字而不是列表中的值,因此您可以使用它。 一个替代方案是 该函数为您提供了一个在表单