我应该如何引用任何以固定字符串开始并以其结束数字不同的任意类属性?

2024-09-30 01:19:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个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不允许在配置中使用“.”


Tags: 实例函数nonameenable规则dirline

热门问题