SafeConfigParser:部分和环境变量
SafeConfigParser: sections and environment variables
(使用 Python 3.4.3)
我想在我的配置文件中使用环境变量,我读到我应该使用 SafeConfigParser
和 os.environ
作为参数来实现它。
[test]
mytest = %(HOME)s/.config/my_folder
由于需要获取一个section中的所有选项,所以执行如下代码:
userConfig = SafeConfigParser(os.environ)
userConfig.read(mainConfigFile)
for section in userConfig.sections():
for item in userConfig.options(section):
print( "### " + section + " -> " + item)
我的结果不是我所期望的。正如您在下面看到的,它不仅获得了我在我的部分中的选项 ([test]\mytest
),而且还获得了所有环境变量:
### test -> mytest
### test -> path
### test -> lc_time
### test -> xdg_runtime_dir
### test -> vte_version
### test -> gnome_keyring_control
### test -> user
我做错了什么?
我希望能够将 [test]\mytest
解析为 /home/myuser/.config/my_folder
,但不希望 SafeConfigParser
将我所有的环境变量添加到它的每个部分。
如果我正确理解了你的问题和你想做的事情,你可以通过 not 提供 [=11] 来避免这个问题=] 作为 SafeConfigParser
的参数。当您使用 get()
方法实际检索值时,而是将其用作 vars
关键字参数的值。
这是可行的,因为它避免了从所有环境变量创建 default 部分,但允许在出于 interpolation/expansion 目的引用时使用它们的值。
userConfig = SafeConfigParser() # DON'T use os.environ here
userConfig.read(mainConfigFile)
for section in userConfig.sections():
for item in userConfig.options(section):
value = userConfig.get(section, item, vars=os.environ) # use it here
print('### [{}] -> {}: {!r}'.format(section, item, value))
(使用 Python 3.4.3)
我想在我的配置文件中使用环境变量,我读到我应该使用 SafeConfigParser
和 os.environ
作为参数来实现它。
[test]
mytest = %(HOME)s/.config/my_folder
由于需要获取一个section中的所有选项,所以执行如下代码:
userConfig = SafeConfigParser(os.environ)
userConfig.read(mainConfigFile)
for section in userConfig.sections():
for item in userConfig.options(section):
print( "### " + section + " -> " + item)
我的结果不是我所期望的。正如您在下面看到的,它不仅获得了我在我的部分中的选项 ([test]\mytest
),而且还获得了所有环境变量:
### test -> mytest
### test -> path
### test -> lc_time
### test -> xdg_runtime_dir
### test -> vte_version
### test -> gnome_keyring_control
### test -> user
我做错了什么?
我希望能够将 [test]\mytest
解析为 /home/myuser/.config/my_folder
,但不希望 SafeConfigParser
将我所有的环境变量添加到它的每个部分。
如果我正确理解了你的问题和你想做的事情,你可以通过 not 提供 [=11] 来避免这个问题=] 作为 SafeConfigParser
的参数。当您使用 get()
方法实际检索值时,而是将其用作 vars
关键字参数的值。
这是可行的,因为它避免了从所有环境变量创建 default 部分,但允许在出于 interpolation/expansion 目的引用时使用它们的值。
userConfig = SafeConfigParser() # DON'T use os.environ here
userConfig.read(mainConfigFile)
for section in userConfig.sections():
for item in userConfig.options(section):
value = userConfig.get(section, item, vars=os.environ) # use it here
print('### [{}] -> {}: {!r}'.format(section, item, value))