当前位置:  开发笔记 > 编程语言 > 正文

Python argparse类似帮助的选项

如何解决《Pythonargparse类似帮助的选项》经验,为你挑选了1个好方法。

我正在编写一个带有两个参数的python脚本,以及一些选项:

scriptname [-h] [-l] [-q|-d] arg1 arg2

-q(安静)和-d(调试)选项更改的详细级别,而-h选择是通过argparse自动创建的帮助选项.

我希望-l(list)选项的行为与-h选项类似,因为它不需要(否则是强制的)参数,并列出一些有用的信息(与-h选项不同).实际上,这意味着可以通过以下三种方式调用脚本:

scriptmane [-q|-d] arg1 arg2
scriptname -l
scriptname -h

两种可能的前进方式是:

    使参数可选(与NARGS ="?"),并添加代码,以验证是否有在那里所有的情况下两个参数-lOG -h选项都没有给出.

    编写自定义操作类(不确定详细信息).

但我希望有一种更简单的方法可以从帮助选项继承"此选项就是您所需要的"行为.


解决方案(基于samwyse的回答):

基于_HelpAction()in argparse.py:

class _ListAction(argparse.Action):
    def __init__(self,
                 option_strings,
                 dest=argparse.SUPPRESS,
                 default=argparse.SUPPRESS,
                 help=None):
        super(_ListAction, self).__init__(
            option_strings=option_strings,
            dest=dest,
            default=default,
            nargs=0,
            help=help)

    def __call__(self, parser, namespace, values, option_string=None):
        print_list()
        parser.exit()

然后,在解析器设置期间:

    parser.add_argument('-l', '--list', action=_ListAction, 
                        help="List all available cases")

samwyse.. 5

如果选项“列表”与“帮助”具有不同的行为,则需要编写自定义操作。好消息是,这样做非常简单。argparse的主页提供了提示,您只需意识到在参数列表中看到该选项后便立即调用该动作。在新操作的调用中(该操作在每个末端应有两个下划线,但markdown会使用这些下划线来强调),对您的选项做任何需要做的事情,然后调用parser.exit()来缩短对更多参数的处理。

在此处查看_HelpAction和_VersionAction的源代码:https : //github.com/ThomasWaldmann/argparse/blob/master/argparse.py(可能只是其中一个子类以跳过编写初始化代码)。



1> samwyse..:

如果选项“列表”与“帮助”具有不同的行为,则需要编写自定义操作。好消息是,这样做非常简单。argparse的主页提供了提示,您只需意识到在参数列表中看到该选项后便立即调用该动作。在新操作的调用中(该操作在每个末端应有两个下划线,但markdown会使用这些下划线来强调),对您的选项做任何需要做的事情,然后调用parser.exit()来缩短对更多参数的处理。

在此处查看_HelpAction和_VersionAction的源代码:https : //github.com/ThomasWaldmann/argparse/blob/master/argparse.py(可能只是其中一个子类以跳过编写初始化代码)。

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有