跳转到主要内容

在blargument解析器内部合并参数。

项目描述

Blargparse扩展了argparse.ArgumentParser,添加了一个add_aggregate方法,可以帮助您将用户界面逻辑与其他所有内容分离。

如何使用

从PyPI安装。

pip install blargparse

这是使用它的最简单方法。

b = BlargParser()
b.add_argument('--left', '-l', type = int, default = 0)
b.add_argument('--right', 'r', type = int, default = 100)
b.add_aggregate('numbers', lambda args: range(args.left, args.right))

b.parse_args([]).numbers == range(0, 100)

您可以让它更复杂。

b = BlargParser()
b.add_argument('--left', '-l', type = int, default = 0)
b.add_argument('--right', 'r', type = int, default = 100)
def f(args):
    output = range(args.left, args.right)
    del(args.left, args.right)
b.add_aggregate(f)

b.parse_args([]).numbers == range(0, 100)

为什么

我编写Blargparse是因为我发现自己在做类似的事情。

# Construct the parser.
a = argparse.ArgumentParser()
a.add_argument('--left', '-l', type = int, default = 0)
a.add_argument('--right', 'r', type = int, default = 100)

# Parse the arguments
import sys
ns = a.parse_args(sys.argv)

# Convert them into the form I want for my application.
numbers = range(ns.left, ns.right)

在编写这个程序的过程中,我觉得最有意义的输入参数是数字范围,但我认为如果最终用户可以将这个范围指定为--left--right标志的组合,会更容易。我可能根据用户似乎更喜欢的选项来改变这个。

上面的方法很好,因为它是小的,但我有几个这样的参数分散在几个子解析器中,而且构造、解析和参数的转换因此分散在函数甚至文件中。

使用纯argparse,我最终做了一些像这样的事情。

def _build_subparsers(argparser):
    'This adds subparsers to the parser.'
    subparsers = argparser.add_subparsers()
    # ...

def _apply_aggregates(args):
    args.range = range(args.left, args.right)
    del(args.left, args.right)

argparser = argparser.ArgumentParser()
_build_subparsers(argparser)
args = argparser.parse_args()
_apply_aggregates(args)

这比以前好一些,但是它将子解析器组合在一起并聚合在一起。我想让子解析器与相关的聚合组合在一起,并且我不希望根据某些内容是子解析器还是聚合来分组;我认为聚合是子解析器的组成部分。

一个更令人困惑的替代方案可能是在这个基础上创建自己的非argparse接口,用于指定子解析器和聚合的分组。

项目详情


下载文件

下载适合您平台的应用程序。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

blargparse-0.0.3.tar.gz (2.1 kB 查看哈希值)

上传时间: 源码

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面