パラメータファイルを読み込ませるスクリプトの定型

次のようなパラメータファイルを読むスクリプトの定型をメモしておきます。

par1 = 3
par2 = 0.4
from optparse import OptionParser
import shlex

class MainClass():
    def __init__(self, parfile, verbose=0, logfile="logfile.txt"):
        self.parfile = parfile
        self.verbose = verbose
        self.logfile = logfile

    def show_input(self):
        print "parfile = %s" % self.parfile
        print "verbose = %d" % self.verbose
        print "logfile = %s" % self.logfile

    def init_par(self):
        ### initialize parameters 
        self.pars = {"par1" : "int",
                     "par2" : "float"
                     }
        for par in self.pars:
            exec("self.%s = %s('%s')" % (par, self.pars[par], '0'))

    def read_par(self):

        if not hasattr(self, "pars"):
            print 'Error: init_par should be defined.'
            quit()

        ### open file 
        try:
            f = open(self.parfile)
        except IOError, err:
            print 'Error: cannot read parfile (%s):' % (self.parfile,), err
            quit()

        ### get file content 
        lex = shlex.shlex(f,posix=True)
        lex.whitespace += "="
        lex.whitespace_split = True

        ### read and set parameters
        while True:
            s = lex.get_token()
            if s!=lex.eof and self.pars.has_key(s):
                val = lex.get_token()
                cmd = "self.%s = %s('%s')" % (s, self.pars[s], val)
                if self.verbose > 0: print cmd
                exec(cmd)
            elif s==lex.eof:
                break
            else:
                print "Error: unexpected error in reading the parfile."
        f.close()

    def run(self):
        print "---run---"
        self.show_input()
        self.init_par()
        self.read_par()
        print "---done---"

#############################
if __name__=="__main__":
#############################

    # --- Interface to command line
    parser = OptionParser()
    parser.add_option("-p", "--parfile", dest="parfile", default="par.txt",
                      type="string", action="store", help="parameter file name")
    parser.add_option("-v", "--verbose", dest="verbose", default=0,
                      type="int", action="store", help="verbose level: int")
    parser.add_option("-o", "--logfile", dest="logfile", default="logfile.txt",
                      type="string", action="store", help="logfile name")
    (opt, arg) = parser.parse_args()

    # --- run main ---
    obj = MainClass(opt.parfile, verbose=opt.verbose, logfile=opt.logfile)
    obj.run()
    quit()