Обновите /etc/sysctl.conf с помощью Python ConfigParser
Я могу использовать библиотеку Python ConfigParser для чтения /etc/sysctl.conf
добавив [dummy]
раздел и переопределение ConfigParser's 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
Вот мои вопросы:
- Есть ли элегантный способ заставить ConfigParser не добавлять этот [фиктивный] раздел? Кажется странным, если бы мне пришлось открыть этот файл снова, чтобы удалить первую строку, содержащую этот фиктивный раздел.
- Может быть, ConfigParser не тот инструмент для редактирования sysctl.conf? Если да, то есть ли какие-либо другие библиотеки Python, которые позволили бы обновлять sysctl.conf удобным способом из Python?
1 ответ
ConfigParser предназначен для анализа файлов конфигурации в стиле INI. /etc/sysconf.conf
это не такой файл.
Вы можете использовать привязки Augeas для Python, если вам нужен парсер, который работает "из коробки":
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>
строки с необязательными комментариями).