argparse参数打印和退出忽略位置参数

时间:2017-07-12 14:09:54

标签: python argparse options

我有一个程序,它接受一个或多个位置参数,如下所示:

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__方法。它现在按预期工作。

0 个答案:

没有答案