python argparse:如何覆盖所有其他参数 - 比如--help在大多数程序中都会这样做?

时间:2017-01-10 18:03:15

标签: python argparse

我们有一堆脚本使用一组标准参数。这些是在所有脚本使用的类中定义的。每个脚本都可以根据需要添加其他参数。

我正在尝试添加一个新参数,该参数应该像--help一样,如果存在,则忽略所有其他参数。当给出新参数(--doc_string)时,我希望忽略所有其他参数,我将打印一个特定的字符串并退出。有没有办法用argparse

执行此操作

我看过使用这样的群组:

parser = argparse.ArgumentParser(prog='PROG')
group1 = parser.add_argument_group('docs', 'doc printing')
group1.add_argument('--doc_string', action = 'store_true', help='print the doc string and exit')
group2 = parser.add_argument_group('group2', 'group2 description')
group2.add_argument('--bar', required=True, help='bar help')
group2.add_argument('--blah',required=True, help='url used to test.')
parser.parse_args()

但是当使用--doc_string运行时,我仍然收到消息--bar is required。独家团体也不对。

我还研究了argparse.RawDescriptionHelpFormatterargparse.RawTextHelpFormatterargparse.ArgumentDefaultsHelpFormatter的子类,但无法理解如何使用它们来完成我正在尝试做的事情。< / p>

1 个答案:

答案 0 :(得分:4)

使用解析器注册您自己的操作。然后,您可以按照--help--version等方式执行此操作,即通过指定操作。

import argparse

class DocstringAction(argparse.Action):

    def __call__(self, parser, namespace, values, option_string=None):
        print('see ya later alligator')
        parser.exit()

parser = argparse.ArgumentParser(prog='PROG')
parser.register('action', 'docstring', DocstringAction)
group1 = parser.add_argument_group('docs', 'doc printing')
group1.add_argument('--doc_string', nargs=0, action='docstring', help='print the doc string and exit')
group2 = parser.add_argument_group('group2', 'group2 description')
group2.add_argument('--bar', required=True, help='bar help')
group2.add_argument('--blah',required=True, help='url used to test.')
parser.parse_args()

如果您不需要docstring操作的任何参数,那么您可以(应该)将nargs=0推送到DocstringAction.__init__,这样就无需指定。{1}}