241

与えられた:

import argparse

pa = argparse.ArgumentParser()
pa.add_argument('--foo')
pa.add_argument('--bar')

print pa.parse_args('--foo 1'.split())

どうすればいいですか

  • 「foo、bar」の少なくとも1つを必須にする:--foo x--bar yおよび--foo x --bar y問題ありません
  • せいぜい「foo、bar」の1つを必須にする:--foo xまたは--bar y問題ない、そうで--foo x --bar yはない
4

2 に答える 2

379

相互排除のようなものを探していると思います(少なくとも質問の2番目の部分について)。

この方法では、foo または bar のみが受け入れられ、両方は受け入れられません。

import argparse

parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('--foo',action=.....)
group.add_argument('--bar',action=.....)
args = parser.parse_args()

ところで、同じ種類の問題に言及している別の質問が見つかりました。

于 2012-06-22T11:14:52.873 に答える
48

モジュールによって提供されていないチェックが必要な場合は、いつでも手動で行うことができます。

pa = argparse.ArgumentParser()
...
args = pa.parse_args()

if args.foo is None and args.bar is None:
   pa.error("at least one of --foo and --bar required")
于 2012-06-22T11:22:16.140 に答える