我正在尝试为用户选择两个选项..
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作为一个或其他选项,其中选择了任何值。
感谢。
答案 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}