通过反射将对象更改为optionparser实例
CommandParser的Python项目详细描述
通过反射将对象更改为optionparser实例
概述
命令行接口使用子域(例如):
hg commit -m ‘foo bar’ git push origin master
commandparser通过对给定类的内省来实现这一点。什么时候? 通过类调用,commandparser使用inspect模块来 为每个类的 方法,将其转换为子命令,并生成optionparser 他们的例子。%prog help将显示 子命令和%prog help <subcommand>将在 <subcommand>已选择。以下划线开头的方法(/cite>) 都过去了。这提供了一种简单的方法来转换api类 进入命令行程序:
class Foo(object): """silly class that does nothing""" def __init__(self): pass def foo(self, value): print "The value is %s" % value def bar(self, fleem, verbose=False): """ The good ole `bar` command - fleem: you know, that thing fleem - verbose: whether to print out more things or not """ if verbose: print "You gave fleem=%s" % fleem return fleem * 2 import commandparser parser = commandparser.CommandParser(Foo) parser.invoke()
(来自http://k0s.org/hg/CommandParser/file/tip/tests/simpleexample.py)
调用示例:
(paint)│./simpleexample.py help Usage: simpleexample.py [options] command [command-options] silly class that does nothing Options: -h, --help show this help message and exit Commands: bar The good ole `bar` command foo help print help for a given command (paint)│./simpleexample.py foo Usage: simpleexample.py foo <value> simpleexample.py: error: Not enough arguments given (paint)│./simpleexample.py foo 4 The value is 4 (paint)│./simpleexample.py bar blah blahblah
对于可选参数,默认值的类型将是 从函数签名检查。当前,强制参数 都是字符串,尽管这显然是一个缺点。
docstring类用于%prog --help(和%prog help, 同样的事情)。方法docStrings(包括那些__init__ 用于子命令帮助。如果参数 在上面给出的文档字符串中列出 (- <argument> : <something about the argument)然后使用这些 为个别选项提供帮助。否则,就剩下这些了 空白。
对于直截了当的案例,它可能足以通过你的课程 直接指向commandparser构造函数。对于更复杂的案件 是创建一个新类的建议模式(通过子类化 或者,如适用,从零开始滚动 commandparser而不是修改(例如)api类来适应 需要CommandParser。这允许使用面向对象的 在不牺牲api类的情况下为子命令提供接口,如果 你可以子类化,这样就没有多少额外的代码要写了。
有关测试和示例,请参见http://k0s.org/hg/CommandParser/file/tip/tests。