2016-09-18 4 views
0

私のプログラムには2つの機能があります。一方は引数なしで実行され、他方はオプションの引数を持つことができます。グループはお互いに干渉することはできません。2つの独立したグループを持つ方法

python file.py --export -l name1 -l name2 -d 1/1/2015 
python file.py --export 
python file.py --run 

そして、これが許可されていないことを:

python file.py --run --export # Namespace(d=None, export=True, l=None, run=True) 

python file.py --run -l name1 # Namespace(d=None, export=False, l=['name1'], run=True) 

しかし、上のようになりまし許可されない操作のどちらとして、エラーを上昇

import argparse 

parser = argparse.ArgumentParser() 

root_group = parser.add_mutually_exclusive_group() 

group_export = root_group.add_argument_group() 
group_export.add_argument('--export', action='store_true', help='Exports data from database') 
group_export.add_argument('-l', action='append', help='Reduce output with league name') 
group_export.add_argument('-d', action='append', help='Reduce output with date range') 

group_run = root_group.add_argument_group() 
group_run.add_argument('--run', action='store_true', help='Start gathering of data') 

は、私がこれを許可することにしたいですコメントによって示される。

答えて

1

引数グループは、相互に排他的なグループの中にネストしません。名前にもかかわらず、2種類のグループは異なる目的を持っています。

引数グループは、ヘルプ表示の引数です。解析中は何もしません。

相互排他的なグループは、引数の出現をテストし、それを使用行に表示しようとします。

--export--runを互いに排他的にすることができます。しかし、実行した場合、lまたはdの使用をブロックしません。しかし、あなたはそれらの値を無視することができます。または、解析後に独自のテストを行い、その点に不平を言うことができます。

この制約を使用行で表すには、どのような意味がありますか?カスタマイズする必要があるかもしれません。

サブパーザを使用することもできます。それはあなたの事件にうってつけかもしれません。 'エクスポート'パーサは、それを扱う引数を定義します。 '実行'はそれ以上の引数を受け入れません。

これは、他のargparse質問で議論されています。サイドバーはいくつかの可能性のあるマッチを見つけたようだ。

関連する問題