如何使用 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 个”

如何在bash中获得第n个位置参数?

如何从第 N 个位置获取批处理文件参数?

TypeError: __array__() 接受 1 个位置参数,但给出了 2 个(图像分类 Keras)

TypeError: __array__() 接受 1 个位置参数,但给出了 2 个(图像分类 Keras)

TypeError:convertDocument()采用1个位置参数,但给出了2个[重复]