使用 os.path.expandvars
我可以在字符串中扩展环境变量,但需要注意:“格式错误的变量名称和对不存在变量的引用保持不变”(强调我的)。此外,os.path.expandvars
也扩展了转义的 \$
。
我想以类似 bash 的方式扩展变量,至少在这两点上。比较:
import os.environ
import os.path
os.environ['MyVar'] = 'my_var'
if 'unknown' in os.environ:
del os.environ['unknown']
print(os.path.expandvars("$MyVar$unknown\$MyVar"))
my_var$unknown\my_var
有:
unset unknown
MyVar=my_var
echo $MyVar$unknown\$MyVar
它给出了 my_var$MyVar
,这就是我想要的。
最佳答案
以下实现与 os.path.expandvars
保持完全兼容,但通过可选参数允许更大的灵 active :
import os
import re
def expandvars(path, default=None, skip_escaped=False):
"""Expand environment variables of form $var and ${var}.
If parameter 'skip_escaped' is True, all escaped variable references
(i.e. preceded by backslashes) are skipped.
Unknown variables are set to 'default'. If 'default' is None,
they are left unchanged.
"""
def replace_var(m):
return os.environ.get(m.group(2) or m.group(1), m.group(0) if default is None else default)
reVar = (r'(?<!\\)' if skip_escaped else '') + r'\$(\w+|\{([^}]*)\})'
return re.sub(reVar, replace_var, path)
下面是一些调用示例:
>>> expandvars("$SHELL$unknown\$SHELL")
'/bin/bash$unknown\\/bin/bash'
>>> expandvars("$SHELL$unknown\$SHELL", '')
'/bin/bash\\/bin/bash'
>>> expandvars("$SHELL$unknown\$SHELL", '', True)
'/bin/bash\\$SHELL'
关于python - 如何像bash一样在python中扩展环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30734967/