如何使用2个位置参数在argparse上打印帮助界面?

时间:2016-03-15 09:13:06

标签: python argparse positional-parameter

我正在学习argparse的基础知识,并且我制作了一个在命令行中打印太阳系信息的程序,但是,我使用了2个位置参数导致了一些并发症。我的目标是打印帮助'在命令行中输入未知参数但由于使用多个位置参数而无法进行时的接口。现在使用可选参数是不可能的。

如何打印未知参数的帮助?据我所知,行星并不需要被称为行星' planet'但是之后的任何东西和一个星球的名字都让我很难做到这一点。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您想要使用自定义类型引发argParse.ArgumentTypeError,这里有一个基本示例:argparse choices structure of allowed values