更改argparse用法信息参数顺序(Change argparse usage message a

2019-10-23 02:59发布

我使用的python3 argparse。 在我的剧本,我有一些subparsers,位置参数以及一些可选的参数。 我有一个可选的参数在任意数量的文件路径通过,并且它使用nargs='*' 。 显示这样对我的脚本的使用信息:

usage: myprog.py subparser1 [-h] [--dir DIR] 
                            [--files [FILES [FILES ...]]]
                            positional_arg

但是,如果你真的把positional_arg--files标志这一用法消息的建议,我觉得解析器最终消费为文件路径,而不是(因为的nargs='*' ),然后抛出,因为一个错误它没有找到所需要的positional_arg

我认为是打印出的使用信息的方式是误导性的。 由于我有多个subparsers,我想找到一种方法来改变所有使用邮件(不使用手动输入所有这些usage=参数)只是这样的位置参数首先显示,希望清理的混乱。

所以我的主要问题是如何更改的参数是argparse消息的使用部分内的排序方式?

编辑解决一个可能的解决方案并不为我工作。

我不想添加--files标志与位置参数nargs='*' 。 首先,因为这使得它现在显示了帮助消息的“位置参数”部分中,而不是与我的可选参数,其余所以使它看起来像它需要的“可选参数”部分中,即使你可以它传递0参数。

其次,由于因为如果我想有另一个标志,需要除了任意数量的参数--files (如--folders ),如果我让他们两个位置参数,我碰到了同样的问题在哪里第一个会一直占用参数,直到结束。 如果我做了一个位置和一个可选则误导用法消息仍然是一个问题。

Answer 1:

有几个问题在这里 - 如何将参数解析,以及使用的格式化。

一对夫妇的快速修复:

使用--纪念自选列表的末尾,和位置(S)的开始。

另一种可能是把你的positional变成optional 。 也就是说,给它一个简单的标志,并required如果需要的参数。 然后,它可以在子分析器的输入放在任何地方。


https://stackoverflow.com/a/26986546/901925满足下列一个*可选位置的这个问题。 这使得同样快速的建议。 它也显示了帮助格式化如何可以改变位置不能移动到使用结束。 但它并没有解决多线的使用情况。

使用顺序是在最近的SO问题讨论, https://stackoverflow.com/a/29619171/901925


如果你不喜欢默认的参数分组(positionals和自选),你可以使用argument_groups不同的标题和描述。 有了这样NARGS“?” 和“*”和“需要”的参数,如“自选”和'positionals的名字可能会造成混淆。 我试图使用“自选”标记',希望它是减少混乱。



Answer 2:

由于argparse不放在这里的选项是在命令行中使用任何限制,它并没有真正意义的一个选项,采取的参数任意数量。 位置参数,而另一方面, 有一个强制命令。 我会做这样的事情

add_argument("positional_arg")
add_argument("files", nargs='*', help="Optional, one or more files")

相反,转换--files选项的纯粹是可选的位置参数列表。 那么有没有混乱,无论是在帮助信息或在实际使用中,哪些参数是为了在文件列表的一部分。



文章来源: Change argparse usage message argument order