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


热门话题
java找不到当前线程的会话   同步Java同步方法调用非同步方法   这段代码的java时间复杂度是如何列出一个集合的所有子集的?   java Jetty SslConnectionFactory nextProtocol   为什么在java集合中使用游标而不是for循环   java如何对长函数进行单元测试?   如何从java中的文本输入创建数组   java工具栏内容未显示,尽管出现了片段内容   java MediaPlayer无法处理本地文件   java在多次读取时,从TCP服务器读取的数据将挂起   java组织。springframework。数据领域无法将PageImpl强制转换为   java如何使用@WithMockUser并从属性文件中传递用户名和密码?   JavaSpringBootGradle插件2。x如何使用自定义启动器布局工厂   sockets Java客户端和服务器之间使用字符串等进行通信的“行业标准”方法是什么   java变量引用不存在的资源:${project\u loc:project\u name}   搜索如何返回LDAP Java中所有用户的特定属性?   JDK1.8.016x的java密钥斗篷代理问题   spring如何使用Java中的Exchange获取邮件   java Kotlin+Dagger 2:Dagger*文件不会生成   如何在传入的double上执行操作,然后在Java中返回