如何在 Python 中将环境变量计算为字符串?

我有一个表示路径的字符串。因为这个应用程序是在 Windows、 OSX 和 Linux 上使用的,所以我们定义了环境变量来正确地映射来自不同文件系统的卷。结果是:

"$C/test/testing"

我想要做的是计算字符串中的环境变量,以便它们被各自的卷名所替换。是否有一个特定的命令我遗漏了,或者我必须采取 os.environ.keys()和手动替换字符串?

50010 次浏览

使用 OS Path expandvars展开字符串中的环境变量,例如:

>>> os.path.expandvars('$C/test/testing')
'/stackoverflow/test/testing'

在 Python 3中,你可以这样做:

'{VAR}'.format(**os.environ))

比如说

>>> 'hello from {PWD}'.format(**os.environ))
hello from /Users/william

os.path.expandvars解决方案不会展开未设置的变量。

如果希望将未设置的变量展开为空值(就像 shell 那样) ,可以使用 string.Template,例如:

import os
from string import Template
from collections import defaultdict


def expand_posix_vars(posix_expr, context):
env = defaultdict(lambda: '')
env.update(context)
return Template(posix_expr).substitute(env)


conf_str = "${PREFIX}something"


assert "something" == expand_posix_vars(conf_str, {})
assert "hellosomething" == expand_posix_vars(conf_str, {"PREFIX": "hello"})