2013-07-08 80 views
2

我正在用Python編寫腳本,並使用argparse來解析我的參數。該腳本應該比較可用對齊器池中的兩個不同「對齊器」,並且每個對齊器都有一些配置選項。帶有Python選項的選項argparse?

我希望能夠把我的腳本的東西,如:

./script.py --aligner aligner1 --param 12 --aligner aligner2 --param 30 --other_param 28 

我想走出這個某種結構,其中第一--param選項「屬於」第一 - aligner選項,第二個--param和--other_param選項「屬於」第二個--aligner選項。

是argparse能夠進行這種結構化的選項解析嗎?

如果是這樣,那麼最好的方法是什麼?如果沒有,我應該看看另外一個圖書館嗎?

是否有一個非常好的UI設計,我可以使用,而不是這個?

+0

傳遞給每個對齊器的參數是可選還是必需的? – Owen

+0

Aligners應該能夠同時具有必需參數和可選參數。 – interfect

回答

1

一般來說,我認爲你想要的是不可能的,因爲你不能將可選參數值關聯在一起。也就是說,我看不到如何將--param 12--aligner aligner1聯繫起來。

但是,

您可以使用​​如下:

p = argparse.ArgumentParser() 
p.add_argument ("--aligner", action="append", nargs="+") 

這將創建多個校準參數,每個都需要至少一個參數(對準名)。然後,您可以使用額外的編碼方案(您可以在解析器的幫助文本中記錄)編碼每個對齊器的參數。例如,您可以用打電話給你的腳本:

./script.py --aligner aligner1 param=12 --aligner aligner2 param=30 other_param=28 

你再拆出每個對準的附加參數爲list,通過'='拆分,然後創建一個dict。可能使用默認的一組參數進行更新。

+0

我決定使用帶有nargs ='*'的選項,並使用第二個ArgumentParser從結果列表中解析子選項,前綴字符爲「+」。 – interfect