来自外国部分的Python ConfigParser插值

use*_*738 16 python python-2.x python-2.4 configparser python-2.7

使用Python ConfigParser,是否可以跨外部使用插值?我的想法似乎告诉我,我已经看到它可能在某个地方,但我在搜索时找不到它.

这个例子不起作用,但它是为了让我知道我正在尝试做什么.

[section1]
root = /usr

[section2]
root = /usr/local

[section3]
dir1 = $(section1:root)/bin
dir2 = $(section2:root)/bin
Run Code Online (Sandbox Code Playgroud)

请注意,我使用的是Python 2.4.

cho*_*own 13

在python 3.2及更高版本中,这是完全有效的:

[Common]
home_dir: /Users
library_dir: /Library
system_dir: /System
macports_dir: /opt/local

[Frameworks]
Python: 3.2
path: ${Common:system_dir}/Library/Frameworks/

[Arthur]
nickname: Two Sheds
last_name: Jackson
my_dir: ${Common:home_dir}/twosheds
my_pictures: ${my_dir}/Pictures
python_dir: ${Frameworks:path}/Python/Versions/${Frameworks:Python}
Run Code Online (Sandbox Code Playgroud)

编辑:

我刚才看到你正在使用的Python 2.4,所以没有,部分插值不能在做Python 2.4中.它是在python 3.2中引入的- 请参阅第13.2.5节 - ConfigParser值的插值.

类 configparser.ExtendedInterpolation

用于插值的替代处理程序,用于实现更高级的语法,例如在zc.buildout中使用.扩展插值使用$ {section:option}来表示来自外部区域的值.插值可以跨越多个级别.为方便起见,如果省略section:part,则插值默认为当前节(可能是特殊节中的默认值).例如,上面使用基本插值指定的配置看起来像扩展插值:

   [Paths]
   home_dir: /Users
   my_dir: ${home_dir}/lumberjack
   my_pictures: ${my_dir}/Pictures
Run Code Online (Sandbox Code Playgroud)

也可以获取其他部分的值:

   [Common]
   home_dir: /Users
   library_dir: /Library
   system_dir: /System
   macports_dir: /opt/local

   [Frameworks]
   Python: 3.2
   path: ${Common:system_dir}/Library/Frameworks/

   [Arthur]
   nickname: Two Sheds
   last_name: Jackson
   my_dir: ${Common:home_dir}/twosheds
   my_pictures: ${my_dir}/Pictures
   python_dir: ${Frameworks:path}/Python/Versions/${Frameworks:Python}
Run Code Online (Sandbox Code Playgroud)