Python argparse互斥args

时间:2011-01-14 15:17:45

标签: python argparse

如何让argparse做类似的事情:

[ 'all' | [ pos1 [ pos2 [ pos3 ...]]]] --some --other --flags

其中all是保留字(如果它不需要-前缀,则将其标记为“

第二: 是否可以为-h--help之类的命名参数设置一些别名?也许我应该试试add_mutually_exclusive_group()

1 个答案:

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

如果您接受“全部”作为您的位置参数之一,则必须执行此操作:

# pos = ('all', 'this, 'that', 'theother')

if pos[0] == 'all': #other parameters are ignored
    do_some_stuff('all')
else:
    do_some_other_stuff('positional arguments')

除非你有某些具体原因,否则我认为没有理由不采用后一种方式。