通过反射将对象更改为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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
使用jaxb2annotateplugin和XJC工具的java自定义注释   java组织。xeustechnologies。jcl无法加载WstxInputFactory类   java JUnit在格式化字符串上比较失败   java Bukkit配置部分getKeys   如何关闭Java流?   java Struts2正则表达式配置   链式事务注释的java奇怪行为   java在两个JButton之间使用变量   java签署APK时内容会发生什么变化?   java LWJGL:Slick:3D世界中的绘图字体   如何分解Java数组?   在Java MySql中处理多个过滤器   java如何在Firebase数据库中跳过初始OnChildaded事件触发   java如何在PreviewView中使用CameraX?   在子类#中重写父类后访问父类原始方法的java已解决   java找不到类型的属性   游戏框架游戏!框架+Java