2014-04-01 26 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运行函数。