Mini Shell
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import ConfigParser
import os
SECHEAD = 'asection'
class FakeSecHead(object):
def __init__(self, fp):
self.fp = fp
self.sechead = '['+SECHEAD+']\n'
def readline(self):
if self.sechead:
try: return self.sechead
finally: self.sechead = None
else: return self.fp.readline()
def load(path, case_sensitive=False):
config = ConfigParser.ConfigParser()
if case_sensitive:
config.optionxform = str
config.readfp(fp=FakeSecHead(open(path)), filename=path)
return dict(config.items(section=SECHEAD))
cache = {}
def load_once(path, ignore_errors = False):
"""
Read ini file once (cached) and return its content as dict
"""
try:
res = cache[path]
except KeyError:
try:
res = cache[path] = load(path)
except (IOError, ConfigParser.Error):
if not ignore_errors:
raise
res = cache[path] = {}
return res
def change_settings(dict, path, tmp_path=None):
if not tmp_path:
tmp_path = path+".tmp"
fin = open(path, 'r')
fout = open(tmp_path, 'w')
used_keys = []
for line in fin:
l = line.strip()
if l and not l.startswith('#'):
key, value = l.split('=', 1)
key = key.strip()
if key in dict:
fout.write(key+'='+str(dict[key])+'\n')
used_keys.append(key)
continue
fout.write(line)
fin.close()
for key in dict.keys():
if key not in used_keys:
fout.write(key+'='+str(dict[key])+'\n')
fout.close()
os.rename(tmp_path, path)
Zerion Mini Shell 1.0