首页 > 解决方案 > 多次指定相同的选项以收集多个子值(python argparse 子命令)

问题描述

我正在尝试这样做:

$ myfile.py config --user 'abc1' --password 'def1' --configname 'first' config config --user 'abc2' --password 'def2' --configname 'second'

config 是一个子命令(如 argparse.ArgumentParser 文档中所述,在 argparse 中添加子命令)。

这应该允许我从命令行收集任意数量的配置(在本例中为 2)的单个配置名称、用户名和密码。

这些我将坚持为

$ cat first
[user]
abc1

[password]
def1

$ cat second
[user]
abc2

[password]
def2

当我尝试这个时,我得到了

error: unrecognized arguments: 

我怎样才能实现类似的功能。

这是我的代码:

>>> import argparse
>>> parser = argparse.ArgumentParser(prog='PROG')
>>> subparsers = parser.add_subparsers(help='sub-command help')
>>> # create the parser for the "a" command
... parser_a = subparsers.add_parser('config', help='a help')
>>> parser_a.add_argument('--user', required=True)
_StoreAction(option_strings=['--user'], dest='user', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> parser_a.add_argument('--password', required=True)
_StoreAction(option_strings=['--password'], dest='password', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> parser_a.add_argument('--configname', required=True)
_StoreAction(option_strings=['--configname'], dest='configname', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> parser.parse_args(['config', '--user', 'abc1', '--password', 'def1', '--configname', 'first'])
Namespace(configname='first', password='def1', user='abc1')
>>> 
>>> 
>>> 
>>> import argparse
>>> parser = argparse.ArgumentParser(prog='PROG')
>>> subparsers = parser.add_subparsers(help='sub-command help')
>>> # create the parser for the "a" command
... parser_a = subparsers.add_parser('config', help='a help')
>>> parser_a.add_argument('--user', required=True)
_StoreAction(option_strings=['--user'], dest='user', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> parser_a.add_argument('--password', required=True)
_StoreAction(option_strings=['--password'], dest='password', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> parser_a.add_argument('--configname', required=True)
_StoreAction(option_strings=['--configname'], dest='configname', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> parser.parse_args(['config', '--user', 'abc1', '--password', 'def1', '--configname', 'first', 'config', '--user', 'abc2', '--password', 'def2', '--configname', 'second'])
usage: PROG [-h] {config} ...
PROG: error: unrecognized arguments: config

标签: pythonpython-3.xcommand-line-argumentsargparse

解决方案


推荐阅读