2016-09-18 116 views
0

我的程序有兩個功能。一個沒有任何參數運行,另一個可以有可選的參數。這些羣體不能相互干擾。如何擁有兩個獨立的組

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') 

我想這是允許的:

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) 

然而,作爲現在無論是不允許操作的上升一個錯誤,因爲由評論表示。

回答

1

參數組不嵌套在互斥組中。儘管有這些名字,但這兩類羣體有不同的目的。

參數在幫助顯示中分組參數。他們在分析過程中什麼都不做。

互斥組測試參數的出現,並嘗試在使用行中顯示該參數。

您可以使--export--run相互排斥。但它不會阻止使用ld運行。但是你可以忽略這些值。或者你可以在解析後做你自己的測試,並抱怨這一點。

什麼是在使用線中表示這種約束的有意義的方式?您可能需要自定義。

另一種可能性是使用子分析器。這可能會更好地適合你的情況。 「導出」解析器將定義與之配合的參數。 '跑'不會接受任何進一步的論據。

以某種方式,這已經在其他問題中討論過了。側邊欄似乎找到了一些可能的匹配。