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