似乎Python的os.path.expandvars()
函数在调用进程环境中运行。有没有办法将自己的新变量添加到混合而不污染流程环境?
我能想出的最好的是:
>>> env = os.environ
>>> env["FOO"] = "VAL"
>>> os.path.expandvars("variable FOO=$FOO")
'variable FOO=VAL'
>>> del env["FOO"]
理想情况下,我想传递一个env
参数,就像subprocess.Popen()
一样。看来我必须自己编写这样的包装器吗?
答案 0 :(得分:1)
这可能看起来很傻,但请尝试执行以下操作:
# Crete a new env and modify it
new_env = os.environ.copy()
new_env["FOO_VAR"] = "FOO_VALUE"
# Replace the env e use expandvars
tmp_env = os.environ
os.environ = new_env
print(os.path.expandvars("variable FOO=$FOO_VAR"))
# Return to the old env
os.environ = tmp_env
顺便说一下,我最初使用正则表达式来识别 %(?.+)% 和 $\{?(?.+)\}?[/\\\n],但执行上述操作似乎更好。