2015-05-19 22 views
0

我刨寫使用argparse庫的命令,這是我的命令結構:Python argparse子分析器的有效用法?

$ python cvs.py -d my_adress local diff -r xyz -N -d details 

在這裏,當地已多次命令分組,它如本地提交,地方附加等 例如在局部差異被本地差異執行的函數一起解析之後,在主要和所有開關中解析[-d my_address]。

同樣,還有另一個命令組與本地並行;說全球。

開關-d不與-r混合。因此,解析器解析-r不知道-d,反之亦然。

是否有可能使用argparse實現這個?如果是的話,有人可以建議我一個粗略的算法來做到這一點。 如果不是,在Python中做什麼其他可能的方法? 謝謝。

+0

您的描述不清楚。 '本地有多個命令'是什麼意思'?像'-d'這樣的標記參數是獨立分析的,並且可以按任意順序進行。請記住,'argparse'解析你的輸入,但不執行它。 – hpaulj

回答

1

請參閱nargs參數,即'*'選項。 它不會做一個子分析(我認爲根本不可能),但它至少會分組你的選項,所以你會得到-d-r作爲單獨的選項返回。 -N將不會是已知選項。我不知道argparse是否會認爲它是一個錯誤(你不想要的),或者只是另一個參數-r

您的方法可能會失敗。 CVS子命令可以有各種單字母選項,如-d,-r等(它是a long list)。您會發現自己經常會做出艱難的選擇,決定是否要將特定的CVS選項作爲子命令來支持,或者將該字母用作cvs.py選項。

您可以引入一些標記來分隔CVS子命令,即python cvs.py -d my_adress local diff § -r xyz -N。然而,這不是一個真正的改善cvs -d my_adress local diff; cvs -r xyz -N了。

相關問題