【发布时间】:2015-07-25 07:35:30
【问题描述】:
我在 python3 中使用 argparse。在我的脚本中,我有一些子解析器、一个位置参数和一些可选参数。我有一个可选参数来传递任意数量的文件路径,它使用nargs='*'。我的脚本的使用消息显示如下:
usage: myprog.py subparser1 [-h] [--dir DIR]
[--files [FILES [FILES ...]]]
positional_arg
但是,如果您实际上按照此用法消息的建议将positional_arg 放在--files 标志之后,我认为解析器最终会将其作为文件路径使用(因为nargs='*'),然后抛出一个错误,因为它没有找到所需的positional_arg。
我认为使用信息的打印方式具有误导性。由于我有多个子解析器,我想找到一种方法来更改所有使用消息(无需使用 usage= 参数手动输入它们),以便首先显示位置参数,希望能消除混乱。
所以我的主要问题是如何更改参数在 argparse 消息的使用部分中的排序方式?
编辑以解决一种对我不起作用的可能解决方案。
我不想将--files 标志添加为nargs='*' 的位置参数。首先,因为这使它现在显示在帮助消息的“位置参数”部分,而不是与我的其余可选参数一起显示在“可选参数”部分,所以它看起来像是必需的,即使你可以传递 0 个参数。
其次,因为如果我想有另一个标志,除了--files(例如--folders)之外,它还接受任意数量的参数,并且如果我将它们都设为位置参数,我会遇到相同的情况第一个会一直使用参数直到结束的问题。如果我设置了一个位置和一个可选,那么误导性使用消息仍然是一个问题。
【问题讨论】:
-
用 0 个参数指定
--files真的有意义吗?您可能想改用nargs='+'。 -
@chepner 谢谢,这很好,我会这样做!但我认为这不会解决使用消息问题。
-
嗯,“位置”并不意味着“必需”。您还可以在
files参数中添加一个help标记,说明它是可选的。 -
nargs='*'的两个选项或参数总是会导致问题。他们不能都排在最后。
标签: python python-3.x command-line-arguments argparse