2014-04-01 46 views
0
一個

我想有兩個選項供用戶選擇..ArgumentParser選擇的兩個選項

parser = argparse.ArgumentParser(description='This is a test script...') 
parser.add_argument("-test", "-t", choices='aaa,bbb,ccc,ddd']) 
parser.add_argument("-dev", "-d", choices=['bbb,ddd']) 
parser.add_argument("-path", "-p", choices=['Software','Hardware']) 

我有這樣一個命令行(ipy64 driver.py -t ALLTESTS -p軟件)

然而,ARGS = parser.parse_args()返回ARGS返回類似: 命名空間(測試= 'AAA',路徑= '軟件')

我想修改這一點,所以如果選擇-t執行代碼分支,如果選擇了-d,則執行代碼的不同分支。所以像..

parser.add_argument("-dev", "-d", "-t", choices=['aaa,bbb,ccc,ddd']) 

但是,名稱空間不包含-test的值。因此,基本上我希望用戶能夠選擇-t或-d作爲其中一個或其他選項,並選擇與之相關的任何值。

謝謝。

+0

你可以修復你的測試和開發的選擇,它是一個字符串的元素的列表。 –

+0

這不應該是'driver.py -t alltests -p Software',你沒有選擇allatests –

回答

0

檢查了這一點:

>>> import argparse 
>>> parser = argparse.ArgumentParser(description='This is a test script...') 
>>> parser.add_argument("--test", "-t", choices=['aaa','bbb','ccc','ddd']) 
_StoreAction(option_strings=['--test', '-t'], dest='test', nargs=None, const=None, default=None, type=None, choices=['aaa', 'bbb', 'ccc', 'ddd'], help=None, metavar 
>>> parser.add_argument("--dev", "-d", choices=['bbb','ddd']) 
_StoreAction(option_strings=['--dev', '-d'], dest='dev', nargs=None, const=None, default=None, type=None, choices=['bbb', 'ddd'], help=None, metavar=None) 
>>> parser.add_argument("--path", "-p", choices=['Software','Hardware']) 
_StoreAction(option_strings=['--path', '-p'], dest='path', nargs=None, const=None, default=None, type=None, choices=['Software', 'Hardware'], help=None, metavar=Non 
>>> args = parser.parse_args() 
>>> args 
Namespace(dev=None, path=None, test=None) 
>>> parser.print_help() 
usage: [-h] [--test {aaa,bbb,ccc,ddd}] [--dev {bbb,ddd}] 
     [--path {Software,Hardware}] 

This is a test script... 

optional arguments: 
    -h, --help   show this help message and exit 
    --test {aaa,bbb,ccc,ddd}, -t {aaa,bbb,ccc,ddd} 
    --dev {bbb,ddd}, -d {bbb,ddd} 
    --path {Software,Hardware}, -p {Software,Hardware} 
0

將它的工作,使-t和-d可選?然後只是測試變量的存在。

的默認值設置爲none有:

parser.add_argument("-dev", "-d", choices=['bbb,ddd', None], default =None) 

然後測試值以後:

if (parser.dev != None): 
    ....(do code)... 

我還沒有測試此代碼,但在測試的值是如何我允許用戶選擇使用argparse運行函數。