我正在编写一个Python程序,它使用ConfigParser读取一个配置文件,用于控制程序配置的各个方面、执行以及对环境和环境的定位。我正在RHEL6.4上使用Python2.6.6
其配置的一个方面是需要与多少rsyslog守护进程交互,以及每个实例的详细信息。我选择了格式实例<#>;\使用户可以指定任意数量的实例,这些实例具有一组要配置的一致属性。配置文件摘录如下:
[rsyslog]
rules_dir: /etc/rsyslog.d
instance1_enable: no
instance1_name: rsyslog-Group01
instance1_startupscript: /etc/init.d/%(instance1_name)s
instance1_conf: /etc/%(instance1_name)s
instance1_rules: %(rules_dir)s/rules-%(instance1_name)s
instance1_restart: no
instance2_enable: no
instance2_name: rsyslog-Group02
instance2_startupscript: /etc/init.d/%(instance2_name)s
instance2_conf: /etc/%(instance2_name)s
instance2_rules: %(rules_dir)s/rules-%(instance2_name)s
instance2_restart: no
我构建了一个名为“rsyslog”的对象,使其属性如下所示:
rsyslog.instance2_enable="no"
rsyslog.instance2_name="rsyslog-Group02"
...etc
当我将rsyslog对象和实例号传递给一个函数,让该函数对实例##u规则执行操作时,问题就来了。例如,我这样调用函数:
list_of_rules=read_files(rsyslog,2)
函数应该返回一个从instance2的规则文件中解析出来的规则列表
/etc/rsyslog.d/rules-rsyslog-Group02
当我硬编码实例时,解析规则没有问题:
for line in fileinput.input(rsyslog_object.instance7_rules, mode='r'):
ruleline=re_ruleline.search(line)
但是,我如何允许像下面这样的情况,其中“”表示我传递给函数的实例号:
for line in fileinput.input(rsyslog_object.instance<instancenumber>_rules, mode='r'):
我在其他上下文中使用了locals()和globals()函数来执行变量间接寻址,但我不确定如何在这里应用它们
或者,如果你能看到一个更好的,更优雅的或者Pythonic的方法来解决允许任意数量的连续编号的实例的问题,这些实例可以在迭代中被数字引用,并且更Pythonic;请解释如何以及为什么这是一个更好的或更python方式完成任务
如果有其他方法,我不会使用实例。ConfigParser不允许在配置中使用“.”
我不确定我是否完全理解了这个问题,但是
getattr
你不是想要什么:相关问题 更多 >
编程相关推荐