ArgumentParser选择两个选项之一

时间:2014-04-01 14:33:59

标签: python parsing

我正在尝试为用户选择两个选项..

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 Software)

但是,args = parser.parse_args()返回args返回类似于: 命名空间(test ='aaa',path ='Software')

我想修改它,所以如果选择了-t,则执行代码分支,如果选择-d,则执行不同的代码分支。所以像..

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

但是命名空间不包含-test的值。所以基本上我希望用户能够选择-t或-d作为一个或其他选项,其中选择了任何值。

感谢。

2 个答案:

答案 0 :(得分:2)

是否可以使-t和-d可选?然后只测试变量的存在。

使用以下命令将默认值设置为none:

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

然后测试一个值:

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

我还没有测试过这段代码,但测试一个值是我允许用户选择使用argparse运行函数的方法。

答案 1 :(得分: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}