如何使用 2 个位置参数在 argparse 上打印帮助界面?
Posted
技术标签:
【中文标题】如何使用 2 个位置参数在 argparse 上打印帮助界面?【英文标题】:How do I print the help interface on argparse with 2 positional arguments? 【发布时间】:2016-06-30 15:11:46 【问题描述】:我正在学习 argparse 的基础知识,并且我制作了一个在命令行中打印太阳系信息的程序,但是,我使用了 2 个位置参数,这导致了一些复杂性。我的目标是在命令行中输入未知参数时打印“帮助”界面,但由于使用了多个位置参数而无法打印。使用可选参数目前是不可能的。
如何打印未知参数的帮助?据我了解,行星不需要被称为特定的“行星”,而是任何东西和之后的行星名称,所以我发现很难做到这一点。
【问题讨论】:
您当前的参数集相当奇怪。你真的需要程序能够同时列出(一种子命令)和显示所选星球的信息吗?要么制作 list 和 display 的子命令,要么制作 list 一个标志,即使你说这是不可能的。 通常我们希望argparse
问题包含到目前为止定义的parser
,以及一些示例命令行和所需的解析。很难从这样的文字中看出您想要什么以及您尝试过什么。
位置或标记的参数可以采用choices
参数,例如choices=['mercury', 'venus', 'earth', ...]
.
【参考方案1】:
也许你所追求的是mutually exclusive group。
parser = argparse.ArgumentParser(description="About the Solar System") # initialises argparse
parser.add_argument("--orderby", help="displays the planets ordered by mass, largest to smallest", action='store_true')
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument("--list", help="displays the planets in alphabetical order", action='store_true')
group.add_argument("planet", help="displays information on the chosen <planet> and opens a wiki page", nargs="?", action="store")
args = parser.parse_args()
这会导致
% python3 args.py
usage: args.py [-h] [--orderby] (--list | planet)
args.py: error: one of the arguments --list planet is required
和
% python3 args.py --list
Namespace(list=True, orderby=False, planet=None)
% python3 args.py asdf
Namespace(list=False, orderby=False, planet='asdf')
% python3 args.py --list asdf
usage: args.py [-h] [--orderby] (--list | planet)
args.py: error: argument planet: not allowed with argument --list
【讨论】:
【参考方案2】:您想使用自定义类型引发argParse.ArgumentTypeError
,这里有一个基本示例:argparse choices structure of allowed values
【讨论】:
以上是关于如何使用 2 个位置参数在 argparse 上打印帮助界面?的主要内容,如果未能解决你的问题,请参考以下文章
如何修复“TypeError:fit_transform() 需要 2 个位置参数,但给出了 3 个”
TypeError: __array__() 接受 1 个位置参数,但给出了 2 个(图像分类 Keras)