2013-03-23 74 views
2

我在​​面臨的一個問題,當我混合位置參數,可選參數和argparse.REMAINDER混合位置和可選的參數在argparse

parser = argparse.ArgumentParser() 
parser.add_argument('verbose', action="store") 
parser.add_argument('--config', '-c', nargs="?", dest="config_file") 
parser.add_argument('--dry-run', action="store_true", dest="dryrun") 
parser.add_argument('args', nargs=argparse.REMAINDER, action="store") 

採樣運行:

python test.py verose="5" --config config.xml graph --dry-run 

預期輸出:

verbose = "5" 
config_file = config.xml 
dryrun = True 
args = ['graph'] 

實際產量:

verbose = "5" 
config_file = config.xml 
dryrun = False 
args = ['graph', '--dry-run'] 

我的要求是我verbose-c--config--dry-run作爲命令行選項,在命令行提供的任何其他選項應該被存儲在列表args無論在命令行的參數出現的順序的。 請幫我在做錯的地方。 還有沒有其他更好的命令行解析器的Python?

回答

4

我說你需要的配置是這樣的:

parser.add_argument('--verbose', action="store") 
    parser.add_argument('-c', '--config', nargs="?", dest="config_file") 
    parser.add_argument('--dry-run', action="store_true", dest="dryrun") 
    parser.add_argument('args', nargs='*') 

我覺得你特別給了「剩女」的說法告訴argparse模塊採取的args中的剩餘參數,當找到第一個論點,它不能與其餘的匹配。

如果您希望args的參數值爲0或更多,請使用'*',如果您希望至少有1個參數使用'+'作爲nargs參數。

除此之外,我會推薦argparse documentation,因爲有很多可能已經解析所需的類型(如int或文件參數)。 在免費的Aptana Studio中創建CLI-argparse模塊爲argparse提供了一個很好的包裝,其中包含一些已經設置的標準參數(如verbose)。在這種情況下,詳細級別應該是整數級別。

+0

我想我的問題是非常愚蠢的!但是非常感謝。你的回答解決了我的問題:) – 2013-03-23 06:09:07

+0

提問是絕不愚蠢的(當然在提問前提供了一點研究成果)。另請參閱我在答案中的其他評論。 – 2013-03-23 06:10:31

相關問題