2013-05-20 134 views
3

之一,我有可以通過以下方式來使用的程序:Python的argparse選擇幾個可選參數

program install -a arg -b arg 
program list 
program update 

有永遠只能是(installlistupdate)指定的位置參數之一。並且install方案中只能有其他參數。

argparse文檔有點密集,我很難弄清楚如何正確地做到這一點。我的add_argument應該是什麼樣子?

+1

你看過[argparse教程](http://docs.python.org/2.7/howto/argparse.html)嗎? –

+0

@JonathonReinhart,不,我沒有感謝這個鏈接。我會看到我能從中得到什麼。 – n0pe

+1

@TankyWoo,閱讀我問題的最後一段。此外,將這些信息放在SO上可以讓其他人更容易找到相同的信息。如果RTFM是一攬子規則,則SO不存在。 – n0pe

回答

9

這看起來像你想使用subparsers

from argparse import ArgumentParser 

parser = ArgumentParser() 
subparsers = parser.add_subparsers() 

install = subparsers.add_parser('install') 
install.add_argument('-b') 
install.add_argument('-a') 
install.set_defaults(subparser='install') 

lst = subparsers.add_parser('list') 
lst.set_defaults(subparser='list') 

update = subparsers.add_parser('update') 
update.set_defaults(subparser='update') 

print parser.parse_args() 

如文檔指出,我與set_defaults相結合,這樣就可以知道被調用了哪些子分析器。

+0

這看起來不錯,很容易。我會在接受之前嘗試一下。 – n0pe

+0

就像我需要的那樣工作,但是,在這種情況下,我不知道是否已經調用了list或update,因爲它們都返回空字典。如果有內置的方式可以讓我區分這兩者? – n0pe

+0

@MaxMackie - 那裏有'set_default'進來。 – mgilson

相關問題