サブパーサー (コメントで提案されているように) が機能する場合があります。
もう 1 つの方法は (これmutually_exclusive_group
を完全に行うことはできないため)、次のように手動でコーディングすることです。
import argparse
def main():
parser = argparse.ArgumentParser()
parser.add_argument('-2', dest='two', action='store_true')
parser.add_argument('-3', dest='three')
parser.add_argument('-4', dest='four')
parser.add_argument('-5', dest='five')
args = parser.parse_args()
if not args.two:
if args.three is None or args.four is None:
parser.error('without -2, *both* -3 <a> *and* -4 <b> are required')
print args
return 0
これに小さなドライバーを追加します。
import sys
sys.exit(main())
あなたの例で実行すると、正しいことをしているようです。ここに2つの実行があります:
$ python mxgroup.py -2; echo $?
Namespace(five=None, four=None, three=None, two=True)
0
$ python mxgroup.py -3 a; echo $?
usage: mxgroup.py [-h] [-2] [-3 THREE] [-4 FOUR] [-5 FIVE]
mxgroup.py: error: without -2, *both* -3 <a> *and* -4 <b> are required
2
$