2016-08-16 7 views

答えて

1

私はこれはこれを行うにはparse_argsを作るしようとするよりも簡単です

if not any([args.a, args.b, args.c]): 
    args.a=True 

を解析した後、簡単なテストを追加します。パーサーは、すべての引数を独立して、また任意の順序で解析します。したがって、オプションのいずれかが選択されているかどうかにかかわらず、解析がすべて完了するまで、実際にはわかりません。

+0

正確に何をお探しですか、ありがとう@hpaulj –

0

ここで相互排他的なグループを使用しようとしている場合は、3つの選択肢とデフォルトを持つ単純なオプションを検討してください。

つまり、あなたが異なり、これを構造化することがあります。

parser = argparse.ArgumentParser() 
parser.add_argument("--thing", choices=['a', 'b', 'c'], default='a') 

をあなたはそれが位置引数にする必要がある場合、[私はお勧めしません、オプションの引数はオプションする必要があります]その後、あなたのような、それを達成することができます代わりに、この:ところで

parser.add_argument("thing", choices=['a', 'b', 'c'], nargs='?', default='a') 

は、あなたが適切にimport argparseにできないことがありますので、あなたのスクリプトargparse.pyを呼び出すには悪い考えになります。

+0

この定義では、 'args.a'は' False'でしょうか? 'store_true'のデフォルトは' False'です。 – hpaulj

+0

ハ、そうです。全く無意味です。 – wim

+0

@hpaulj私は私の答えを大幅に編集しました。彼らが解析された後のargsの後処理は気に入らず、一般的にそれを避けるようにしています。 – wim

関連する問題