我有一个程序,它接受一个或多个位置参数,如下所示:
parser.add_argument("tags",
nargs='+',
choices=avail_tags,
metavar='',
help="tag to be collected.")
parser.add-argument("--list-tags", action='store_true')
当我运行程序指定tags
和--list-tags
标志没有参数时,我仍然会收到错误消息,说明需要tags
参数。我希望--list-tags
标志执行的操作是打印avail-tags
并以与--help
标志的工作方式类似的方式退出(忽略位置参数)。
此外,我在metavar=''
参数中添加了tags
,因为列表很长,并且我不希望每次都将其放入帮助输出中,只有当用户请求它时。 / p>
我怎样才能做到这一点?
修改
我尝试扩展动作类(基于'version'
动作选项的类),但它似乎仍然抛出错误:
class List_Tags(argparse.Action):
def __init__(self,
option_strings,
dest='==SUPPRESS==',
default='==SUPPRESS==',
help="show program's version number and exit"):
super(List_Tags, self).__init__(
option_strings=option_strings,
dest=dest,
default=default,
nargs=0,
help=help)
def __call__(self, parser, namespace, values, option_string=None):
print("Hello")
输出:
Hello
usage: myProg.py [-h] [--list-tags] [...]
myProg.py: error: the following arguments are required:
有关它为何仍在检查位置参数的任何想法?
EDIT2
我在parser.exit()
定义中忘记了__call__
方法。它现在按预期工作。