2012-02-03 44 views
1

我有一個Python程序的命令行界面,有一堆選項(比如說,--a,--b--c),但是一個命令行與其他開關之間切換。和奇數的命令行界面解析參數

因此,也許prog -S a b c調用-S動作,而prog -Y a b c調用-Y動作。 prog -Y a b c --a=2 --b=3的話,應該調用-Y行動參數ab和位置參數abc

有沒有什麼辦法讓​​或getopt做參數解析給我嗎?有沒有其他圖書館能夠很好地完成這項工作?

回答

3

我認爲在這種情況下使用argparse的subcommands會很有用。

基本上,您可以創建一個主解析器,負責解析子命令以及一些常用的常規選項,然後解析傳遞給該特定選項的幾個子分析器(每個子命令一個)子命令。

+0

這幾乎是完美的......但如果子命令的名稱看起來像是一個選項,則它不起作用。它實際上並不明確,因爲所有選項都有兩個破折號,並且所有子命令名都有一個;但我不明白如何說出這個問題。 – pavpanchekha 2012-02-07 01:25:01

1

我不能完全肯定這是否會幫助,但到目前爲止,我一直在寫一個包裝,需要從XML參數通過web界面設置,然後將它們傳送到命令:

顯然需要更復雜的參數字符串,而是一個例子的目的:根據我的web界面的某些標誌

def __main__(): 
parser = optparse.OptionParser() 
parser.add_option('-Q', '--ibmax', dest='ibmax', help='') 
(options, args) = parser.parse_args() 
if options.ibmax != 'None' and int(options.ibmax) >= 1: 
       ibmax = '--bmax %s' % options.ibmax 

cmd1 = Popen([another.py, '-Q "%s"' % (options.ibmax),], stdout=PIPE).communicate()[0] 
process = subprocess.Popen(cmd1, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 

,更多的選項被添加到列表ARG,因此不同的運行命令。將每個命令選項添加到解析器,然後檢查-Y或-S命令的值以設置變量並更改您需要傳遞的命令。

我希望這可以幫助,我不是蟒蛇親,這只是適合我。