mutually exclusive group
メカニズムはrequired
パラメータを取ることができます。また、1つの?
ポジションとオプション(フラグ付きの引数)と共に動作します。 (複数の '?'位置は意味をなさない)。
help
ディスプレイには、2つのデフォルトグループpositonal
とoptional
があります。したがって、optional
(フラグが設定されている)がrequired
に設定されていても、デフォルトではoptional
グループに表示されます。引数が必要かどうかについては、usage
行がより良いガイドです。ヘルプセクションのグループラベルが気に入らない場合は、独自の引数グループを定義してください。
In [146]: import argparse
In [147]: parser = argparse.ArgumentParser()
In [148]: gp = parser.add_mutually_exclusive_group(required=True)
In [149]: gp.add_argument('pos', nargs='?', default='foo');
In [150]: gp.add_argument('-f','--foo', default='bar');
In [151]: parser.parse_args('arg'.split())
Out[151]: Namespace(foo='bar', pos='arg')
In [152]: parser.parse_args('-f arg'.split())
Out[152]: Namespace(foo='arg', pos='foo')
In [153]: parser.parse_args('arg -f arg'.split())
usage: ipython3 [-h] [-f FOO] [pos]
ipython3: error: argument -f/--foo: not allowed with argument pos
In [154]: parser.parse_args(''.split())
usage: ipython3 [-h] [-f FOO] [pos]
ipython3: error: one of the arguments pos -f/--foo is required
In [155]: parser.parse_args('-h'.split())
usage: ipython3 [-h] [-f FOO] [pos]
positional arguments:
pos
optional arguments:
-h, --help show this help message and exit
-f FOO, --foo FOO
おっと、使用量が互いにEXLUSIVEグループにおける-f
とpos
を示していません。場合によってはusage
の書式設定が脆いことがあります。引数が定義された順序を切り替える
は、ユーザー定義の引数グループでは、より良い使い方
In [156]: parser = argparse.ArgumentParser()
In [157]: gp = parser.add_mutually_exclusive_group(required=True)
In [158]: gp.add_argument('-f','--foo', default='bar');
In [159]: gp.add_argument('pos', nargs='?', default='foo');
In [160]:
In [160]: parser.parse_args('-h'.split())
usage: ipython3 [-h] (-f FOO | pos)
positional arguments:
pos
optional arguments:
-h, --help show this help message and exit
-f FOO, --foo FOO
を与える:
In [165]: parser = argparse.ArgumentParser()
In [166]: gp = parser.add_argument_group('Mutually exclusive')
In [167]: gpm = gp.add_mutually_exclusive_group(required=True)
In [168]: gpm.add_argument('-f','--foo', default='bar');
In [169]: gpm.add_argument('pos', nargs='?', default='foo');
In [170]:
In [170]: parser.parse_args('-h'.split())
usage: ipython3 [-h] (-f FOO | pos)
optional arguments:
-h, --help show this help message and exit
Mutually exclusive:
-f FOO, --foo FOO
pos
これは、一般的なルールargument_groupsとmutually_exclusive_groups唯一の例外でありますネスティング用に設計されていません。
メートル-X基を必要としないし、使用量が[]
はい、2つのことが 'usage'に影響します。オプションはオプションの後に表示され、引数がその順序と一致する場合にのみグループが表示されます。脆性を修正するには、使用フォーマット作成プログラムを大幅に書き直す必要があります。 – hpaulj