ソフトウェア構成を追加/削除/変更できるようにするには、構成ファイルファイルを解析する必要があります。これは、次のような形式のテキストの複数のブロックによって定義されます。
portsbuild {
path = /jails/portsbuild;
allow.mount;
mount.devfs;
host.hostname = portsbuild.home;
ip4.addr = 192.168.0.200;
interface = nfe0;
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
}
ブロックはかなり反復的であり、これまでのところ、変数の値のみが変更されています。
モジュールを使ってみましre
たが、コードが肥大化して複雑になりすぎていました。次に、モジュールを試してみましたがiscpy
、コードは驚くほど単純でした(ファイル全体を便利な辞書に変換するための1行)が、解析されたデータは正確に本来あるべきものではありませんでした。
>>> conf = iscpy.ParseISCString(open('/etc/jail.conf', 'r').read())
>>> conf
{'portsbuild': {'allow.mount': True, 'interface = nfe0': True, 'exec.start = "/bin/sh /etc/rc"': True, 'ip4.addr': '= 192.168.0.200', 'exec.stop': '= "/bin/sh /etc/rc.shutdown"', 'exec.stop = "/bin/sh /etc/rc.shutdown"': True, 'ip4.addr = 192.168.0.200': True, 'path': '= /jails/portsbuild', 'interface': '= nfe0', 'path = /jails/portsbuild': True, 'mount.devfs': True, 'host.hostname': '= portsbuild.home', 'host.hostname = portsbuild.home': True, 'exec.start': '= "/bin/sh /etc/rc"'}}
私も運試しをしましpyparsing
たが、片道だけでいいようです。それで、Pythonオブジェクトの変更後の読み取りと書き込みの両方の方法で使用できる、クリーンで理解しやすいコードを使用してそのファイルを解析する他のモジュールまたは方法があるかどうか疑問に思っていますか?