简洁的命令行选项解析器
项目描述
“mandy”是一个简单的命令行选项解析器(看那个微妙的名称链接?)
它使用了标准的optparse库,但使得常见功能易于编写(和阅读!)!参数类型检查非常简单,您可以提供自己的验证操作来进一步检查特定于应用的逻辑。
一个示例
import mandy class Main(mandy.Command): # you should define `configure` and `run` methods for your # command to work def configure(self): # --name (string) self.opt('name', default='(unnamed)', desc="set the name") # -n [1-5], default of 1 self.opt('num-things', int, short='n', long=None, default=1, action=between_one_and_five, desc="num items (1-5)") # --frob or --no-frob self.opt('frob', bool, default=True, desc="use frobbing") # --debug (--no-debug is not added since opposite is False) self.opt('debug', bool, default=False, opposite=False, desc="Set Debug mode") # --do-thing=yes/no (explicit value) # (on/off, true/false, yes/no and 1/0 all work for boolean values) self.opt('do-thing', bool, default=False, explicit=True, desc="yes/no") # arg is the same as opt, but without long/short options, # and optional default values # this makes: # command [options] foo1 foo2 [bar] baz self.arg('foo1') self.arg('foo2', bool) self.arg('bar', default=None) self.arg('baz') def run(self, opts): # opts includes your named options and arguments as attributes print "you set name to %s" % (opts.name) # since you can have options that aren't valid python attributes, # you can also treat opts as a dict: print "and there are %s things" % opts['num-things'] def between_one_and_five(num): if not (num >= 1 and num <= 5): raise RuntimeError("number must be between one and five") if __name__ == '__main__': Main()
当使用–help运行时,这将产生以下内容
Usage: example.py [options] foo1 foo2 [bar] baz Options: -h, --help show this help message and exit --name=NAME set the name -n N num items (1-5) --frob use frobbing --no-frob --debug Set Debug mode --do-thing=DO_THING yes/no