一个令人惊叹的应用程序论证助手

aaargh的Python项目详细描述


aaargh:一个令人惊叹的应用程序参数助手。

aaargh是一个python模块,用于构建友好的命令行 应用程序非常简单。使用aaargh构建的应用程序提供一个 可执行,每个公开的python函数都有一个子命令。每个子命令 可能有自己的命令行参数。这与版本 控制系统使用一个入口点提供多个命令。(示例 包括bzr commitgit checkout)。

aaargh是根据电影monty python和 圣杯。首字母缩写aaargh代表an惊人的棒 application argument helper,但省略了几个字母,使其成为AAA。

aaargh与python 2.6+和python 3都兼容。

基本原理

python标准库包含optparsegetoptargparse 模块,在野外您将发现许多可选的命令行 堆在上面的接口库,例如cliffcementopsterplac和许多其他。其中一些库将命令 从实际代码中设置应用程序的行接口 另一个解析api的参数,有些迫使您将代码隐藏在 不明显的框架结构,有些甚至添加了对其他 模块。

这让你尖叫aaargh。瞧,就在这里!

用法

aaargh将其几乎所有工作委托给argparse模块,它将 处理参数和打印使用信息的出色工作。然而, argparse对于许多简单的应用程序来说有点冗长和繁琐,因此 aaargh允许应用程序作者通过包装最小化样板代码 一些非介入式装饰程序中常用的argparse功能。aaargh 不隐藏argparseapi,因为装饰器的完全相同 api作为其对应的argparse。这是一个深思熟虑的设计决定, 这就是使aaargh不同于它的许多替代品的原因。

aaargh.py文件中的docstrings包含需要使用的所有信息 aaargh。有关指定的信息,请参阅argparse文档 参数、提供默认值、添加帮助文本等。

示例

一个简单的命令行应用程序公开几个函数 这个:

#!/usr/bin/env python

import aaargh

app = aaargh.App(description="A simple greeting application.")

# Application level arguments:
app.arg('--name', help="Name of the person to greet", default="stranger")

# Application level defaults:
app.defaults(name="visitor")  # overrides "stranger"


@app.cmd
def hello(name):  # application level "name" argument is always passed
    print("Hello, world!")


@app.cmd(name="hi", help="Say hi")  # override subcommand name
@app.cmd_arg('-r', '--repeat', type=int, default=1, help="How many times?")
def say_hi(name, repeat):  # both application and subcommand args
    for i in range(repeat):
        print("Hi, %s!" % name)


@app.cmd
@app.cmd_defaults(name="my friend")  # overrides "visitor" for this command only
def greetings(name):
    print("Greetings, %s." % name)


@app.cmd(alias='bye')  # Allow "bye" aswell as goodbye
def goodbye(name):
    print("Goodbye, cruel world!")


if __name__ == '__main__':
    app.run()

此应用程序的命令行界面的行为如下:

$ ./example.py hello
Hello, world!

$ ./example.py hi --repeat=3
Hi, visitor!
Hi, visitor!
Hi, visitor!

$ ./example.py --help
usage: example.py [-h] [--name NAME] {hello,hi,greetings} ...

A simple greeting application.

optional arguments:
  -h, --help            show this help message and exit
  --name NAME           Name of the person to greet

Subcommands:
  {hello,hi,greetings}
    hello
    hi                  Say hi
    greetings

$ ./example.py hi --help
usage: example.py hi [-h] [-r REPEAT]

optional arguments:
  -h, --help            show this help message and exit
  -r REPEAT, --repeat REPEAT
                        How many times?

安装

使用pip安装很简单,特别是使用virtualenv

(yourenv) $ pip install aaargh

成功安装后,这应该可以工作:

(yourenv) $ python
>>> import aaargh
>>> help(aaargh)

历史记录

版本0.7.1(2014-03-13)

  • 在源分发中包括许可文件(问题9,问题13)

版本0.7(2014-02-18)

  • 添加对命令别名打包的基本支持(问题4,问题10)

版本0.6(2014-02-16)

  • 不再使用pbr进行包装(第12期)
  • 添加适当的许可文件(问题9)
  • 修复在python 3下调用不带子命令的程序时出现的错误消息

版本0.5(2013-09-23)

  • 不再向子命令添加全局参数(问题3和5)
  • 切换到pbr进行打包

版本0.4(2012-10-17)

  • 修复在使用pip install时自动argparse依赖项安装 Python2.6。

版本0.3(2012-06-10)

  • 在子命令之后还接受全局参数

版本0.2(2012-05-17)

  • 添加对Python3的支持

版本0.1(2012-05-17)

  • 初始版本
Bitdeli badge

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

推荐PyPI第三方库


热门话题
使用Java将JSON转换为哈希映射   java如何通过使用MapStruct从源对象复制值来填充目标对象内部的映射?   注入泛型类型为@InjectGuice的类时发生java错误   字符串如何在JavaIDE中导入基本符号   在Java中将JSON转换为List<List<String>>   java Java9 HttpClient SSLHandshakeException   java jOOQ代码生成器   java如何调整图标(图像按钮),使其不会放大?   java我可以在使用Eclipse时安装2个或更多Android SDK吗   sqlite Java实现DAO   如何解决此错误?“java.lang.NoSuchFieldError:org.apache.http.conn.ssl.SSLConnectionSocketFactory上的实例。<clinit>。”   java Maven:将基于OSP的zip文件解压缩到WEBINF/lib   java如何在每次调用函数时获取当前gps位置?