使用Python的ConfigParser更新/etc/sysctl.conf

时间:2015-07-26 01:24:04

标签: python linux configparser sysctl

我可以使用Python的ConfigParser库通过添加/etc/sysctl.conf部分并覆盖ConfigParser的[dummy]方法来阅读read(),如下所示:

class SysctlConfigParser(ConfigParser.ConfigParser):
    def read(self, fn):
        text = open(fn).read()
        contents = StringIO.StringIO("[dummy]\n" + text)
        self.readfp(contents, fn)

现在棘手的部分是回写我的python程序所做的配置更新,因为如果我现在直接调用ConfigParser.write(),那么它也会添加回[dummy]部分:

[dummy]
net.netfilter.nf_conntrack_max = 313
net.netfilter.nf_conntrack_expect_max = 640
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 5

以下是我的问题:

  1. 有没有一种优雅的方法让ConfigParser不添加这个[虚拟]部分?如果我不得不再次打开这个文件只是为了删除包含这个虚拟部分的第一行,这似乎很奇怪。
  2. 也许ConfigParser不是编辑sysctl.conf的正确工具?如果有的话,是否还有其他Python库可以方便地从Python更新sysctl.conf?

1 个答案:

答案 0 :(得分:2)

ConfigParser用于解析INI样式的配置文件。 /etc/sysconf.conf不是这种文件。

如果你想要一个开箱即用的解析器,你可以使用Python的Augeas绑定:

import augeas

aug = augeas.Augeas()
aug.set('/files/etc/sysctl.conf/net.ipv4.ip_forwarding', '1')
aug.set('/files/etc/sysctl.conf/fs.inotify.max_user_watches', '8192')
aug.save()

文件的格式非常简单(只是<name> = <value>行的集合,带有可选的注释)。