我知道我可以使用argparse,并且可以通过以下方式使位置参数成为可选参数:
parser.add_argument('name_OR_setupFile')
parser.add_argument('date', nargs='?')
parser.add_argument('location', nargs='?')
然后我可以进行错误检查,以确保用户没有做任何愚蠢的事情
问题在于,现在的帮助消息将非常混乱,因为尚不清楚第一个参数的含义是什么.我希望以某种方式将其作为两条不同的add_argument行来执行此操作,但是我不确定如何执行.
我也知道我可以使用–setupFile参数,并使这三个参数成为可选参数……但是我宁愿不要这样做,如果不需要的话.
第三种选择是使用:
parser.add_argument('ARGS', nargs='+', help='ARGS is either of the form setupFile, or name date location')
然后稍后进行错误检查…
预计到达时间:
我希望能够使用以下任一方法调用脚本:
python foo.py setupFile
要么
python foo.py name date location
我希望帮助文本如下所示:
usage:
foo.py setupFile
foo.py name date location
parser = argparse.ArgumentParser()
g = parser.add_mutually_exclusive_group()
g.add_argument('--setup','-s',metavar='FILE',help='your help')
g.add_argument('--name',nargs=3,metavar=('NAME','DATE','LOCATION'),hel
...: p='your help')
parser.print_help()产生:
usage: ipython3 [-h] [--setup FILE | --name NAME DATE LOCATION]
optional arguments:
-h, --help show this help message and exit
--setup FILE, -s FILE
your help
--name NAME DATE LOCATION
your help
我已经使用互斥的可选参数处理了1或3个参数要求.并使用metavar来增加参数的清晰度. (正如最近另一个问题所指出的那样,metavar在位置上不能很好地工作.)
另一种选择是使用子解析器.这仍然需要诸如设置和名称之类的关键字,只有它们输入时不带-.次级解析器的帮助结构也大不相同.