2017-01-04 8 views
0

をargparse:オプションのサブオプションは、私がこのような何かを達成しようとしています

のpython main.py --severity高--start_date 2016年10月12日

のpython main.pyを - ここではサミュエル

に名前を付ける前の引数が--severityであれば、引数--start_date argをにのみ有効となります。 - -の代わりにという名前がある場合。 argparseはエラーを返します。 これはどのように達成できますか?私はしばらくの間探していて、私がやりたいことを見つけることができませんでした。

+0

'--start_date'の後に' --severity'を与えたらどうしますか?または '--name'と' --severity'を指定しますか? 'argparse'では、このようなフラグ付き引数を任意の順序で入力することができます。注文が重要な場合、 'argparse'は間違ったツールです。 – hpaulj

+0

mutually_exclusive_groupは '--name'と一緒に' --start_date'が提供されている場合にエラーを発生させることができますが、 '相互に包含的な'テストの仕組みはありません。 – hpaulj

+0

有用な事前質問:http://stackoverflow.com/questions/19414060/argparse-required-argument-y-if-x-is-present – hpaulj

答えて

1

残念ながら、​​にはこのような機能がないため、明示的に行う必要があります。このようなものはうまくいくはずです:

... 
args = parser.parse_args() 
if getattr(args, 'start_date', None) and not getattr(args, 'severity', None): 
    parser.print_help() 
    parser.exit(1, "error message") 
+0

'default = SUPPRESS'を使用していない限り、名前空間は常に' severity'属性を持ちます。 'args.severity is None'はより良いテストです。 – hpaulj

+0

@hpaulj良いキャッチ!どちらの場合でも動作するようにデフォルト値でgetattrに変更されました。しかし、 'args.start_dateではなくargs.severity:'が読みやすくなります – Marat

関連する問題