我有一個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
行動參數a
和b
和位置參數a
,b
,c
有沒有什麼辦法讓或getopt
做參數解析給我嗎?有沒有其他圖書館能夠很好地完成這項工作?
我有一個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
行動參數a
和b
和位置參數a
,b
,c
有沒有什麼辦法讓或getopt
做參數解析給我嗎?有沒有其他圖書館能夠很好地完成這項工作?
我認爲在這種情況下使用argparse的subcommands會很有用。
基本上,您可以創建一個主解析器,負責解析子命令以及一些常用的常規選項,然後解析傳遞給該特定選項的幾個子分析器(每個子命令一個)子命令。
我不能完全肯定這是否會幫助,但到目前爲止,我一直在寫一個包裝,需要從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命令的值以設置變量並更改您需要傳遞的命令。
我希望這可以幫助,我不是蟒蛇親,這只是適合我。
這幾乎是完美的......但如果子命令的名稱看起來像是一個選項,則它不起作用。它實際上並不明確,因爲所有選項都有兩個破折號,並且所有子命令名都有一個;但我不明白如何說出這個問題。 – pavpanchekha 2012-02-07 01:25:01