0

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

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 不添加这个 [dummy] 部分?如果我不得不再次打开这个文件只是为了删除包含这个虚拟部分的第一行,这似乎很奇怪。
  2. 也许 ConfigParser 不是编辑 sysctl.conf 的正确工具?如果是这样,是否有任何其他 Python 库允许从 Python 以方便的方式更新 sysctl.conf?
4

1 回答 1

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>带有可选注释的行的集合)。

于 2015-07-26T01:52:41.217 回答