4

我怎样才能让 argparse 做类似的事情:

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

all保留字在哪里(如果不需要-前缀,则不能将其设为标志)

第二:是否可以为命名参数设置一些别名,例如-h--help含义相同的选项?也许我应该试试add_mutually_exclusive_group()

4

1 回答 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')

而如果您接受“全部”作为您的位置参数之一,您将不得不这样做:

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

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

除非您有特定的原因,否则我认为没有理由不采用后一种方式。

于 2011-01-14T15:34:42.157 回答