2012-06-22 3 views
98

が考える使用して必要:は二つの引数のいずれかがargparse

import argparse 

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

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

どのように私は "FOO、バー" 必須の

  • メイク少なくとも1:--foo x--bar y--foo x --bar yは大丈夫です
  • "foo、bar"のいずれか1つを作成する必要があります。--foo xまたは--bar yは、--foo x --bar yではありません。
+0

[Pythonでargparseの組み合わせのオプションをコーディングする方法]の可能な複製を( http://stackoverflow.com/questions/5603364/how-to-code-argparse-combinational-options-in-python) – robert

答えて

152

あなたはmutual exclusionのようなものを探していると思います(少なくとも質問の第2部分です)。 この方法では、fooまたはbarのみが受け入れられ、両方が受け入れられることはありません。

そして、あなたは確かにクリスチャン・ウィッツの答えで質問の最初の部分を解決することができます。 両方を組み合わせることで、必要なものを達成できるはずです。

ところで、ちょうど同じ種類の問題を指してanother questionが見つかりました。

希望あなたは常にそれを手動で行うことができますモジュールによって提供されていないいくつかのチェックが必要な場合、これは

+0

私はそれがとても簡単だとは思わなかったでしょう! Python 3.6を愛してください! – bjd2385

20

を支援します。

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") 
関連する問題