パラメータファイルを読み込ませるスクリプトの定型
次のようなパラメータファイルを読むスクリプトの定型をメモしておきます。
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()