Python argparse 互斥参数
我想知道如何让 argparse 实现类似下面的功能:
[ 'all' | [ pos1 [ pos2 [ pos3 ...]]]] --some --other --flags
这里的 all
是一个保留字 (如果不需要 -
前缀,做成标志是不合适的)
第二个问题是:是否可以为命名参数设置一些别名,比如 -h
和 --help
代表同一个选项?也许我应该试试 add_mutually_exclusive_group()
?
1 个回答
4
add_mutually_exclusive_group() 这个功能就是为了让你能添加一个互斥的选项组。
关于你问题的第二部分,下面的代码应该能满足你的需求:
parser.add_argument('-f', '--foobar')
(注意:你的问题有点让人困惑——里面有两个问题,第二个问题直接接着第一个问题的句子说了。而且还有很多拼写错误……我会尽量帮你,但如果你能把问题说得更清楚,我们的回答也会更清晰。)
更新 根据我的理解,互斥的参数必须是必需的,而位置参数不能是必需的。因此,位置参数不能是互斥的(可能是因为这样的话,解释器就无法分辨哪些是哪些了)。不过对你来说,这个问题似乎不太重要,因为无论如何,处理你参数的代码基本上是一样的。
假设你可以按照你想的方式来做,那么你需要这样做:
# all == True
# pos == ('this', 'that', 'theother')
if all == true:
do_some_stuff('all')
else:
do_some_other_stuff('positional arguments')
如果你把“all”作为一个位置参数接受,那你就得这样做:
# pos = ('all', 'this, 'that', 'theother')
if pos[0] == 'all': #other parameters are ignored
do_some_stuff('all')
else:
do_some_other_stuff('positional arguments')
除非你有特别的理由,否则我觉得没有必要不按照后面的方法来做。