20

次のように argparse を設定するにはどうすればよいですか。

if -2 is on the command line, no other arguments are required
if -2 is not on the command line, -3 and -4 arguments are required

例えば、

-2 [good]
-3 a -4 b [good]
-3 a [not good, -4 required]
-2 -5 c [good]
-2 -3 a [good]

ここには同様の質問がいくつかありますが、この状況に対処していないか、理解できません。

それが重要な場合はPython 2.7。

4

2 に答える 2

21

サブパーサー (コメントで提案されているように) が機能する場合があります。

もう 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
$ 
于 2013-08-02T21:10:01.500 に答える