我正在尝试在Python 3应用程序中使用argparse,其中有明确的选项列表,但如果没有指定,则为默认值。
我的代码是:
parser.add_argument('--list', default='all', choices=['servers', 'storage', 'all'], help='list servers, storage, or both (default: %(default)s)')
args = parser.parse_args()
print(vars(args))
然而,当我运行这个时,我得到以下选项:
$ python3 ./myapp.py --list all
{'list': 'all'}
或者没有选项:
$ python3 ./myapp.py --list
usage: myapp.py [-h] [--list {servers,storage,all}]
myapp.py: error: argument --list: expected one argument
我在这里遗漏了什么吗?或者我可以没有指定选项的默认值吗?
答案 0 :(得分:31)
将const annotations = Reflect.getMetadata('annotations', NavComponent)
const meta = annotations.find(annotation => annotation instanceof ComponentMetadata)
meta.template = meta.template.replace(
'{{ someVarInTemplate }}',
'initialContentInIndex'
)
和nargs
参数传递给const
:
add_argument
如果您想知道在没有参数的情况下是否传递了parser.add_argument('--list',
default='all',
const='all',
nargs='?',
choices=['servers', 'storage', 'all'],
help='list servers, storage, or both (default: %(default)s)')
,请删除--list
参数,并检查const
是否为args.list
。
答案 1 :(得分:4)
谢谢@ShadowRanger。 Subcommands
正是我需要的,与nargs
和const
相结合。以下作品:
parser = argparse.ArgumentParser()
subparser = parser.add_subparsers()
parser_list = subparser.add_parser('list')
parser_list.add_argument('list_type', default='all', const='all', nargs='?', choices=['all', 'servers', 'storage'])
parser_create = subparser.add_parser('create')
parser_create.add_argument('create_type', default='server', const='server', nargs='?', choices=['server', 'storage'])
args = parser.parse_args()
pprint(vars(args))
$ python3 ./myapp.py -h
usage: dotool.py [-h] {list,create} ...
Digital Ocean tool
positional arguments:
{list,create}
optional arguments:
-h, --help show this help message and exit
单独列出选项:
$ python3 ./myapp.py list
{'list_type': 'all'}
带参数的列表选项:
$ python3 ./myapp.py list servers
{'list_type': 'servers'}