我们有一堆脚本使用一组标准参数。这些是在所有脚本使用的类中定义的。每个脚本都可以根据需要添加其他参数。
我正在尝试添加一个新参数,该参数应该像--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.RawDescriptionHelpFormatter
或argparse.RawTextHelpFormatter
或argparse.ArgumentDefaultsHelpFormatter
的子类,但无法理解如何使用它们来完成我正在尝试做的事情。< / p>
答案 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}}