在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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7592d9607d48242cff024c2d4da798e5ee27f65864709392b7690f6bd397611c |
|
MD5 | e10d5653da84cdf70bce342f2c7887d7 |
|
BLAKE2b-256 | bfb5b04ef8247a09fe8a1a6074c176e991b777b0a71af7ac54eb2d2ebdd2d1db |