Python argparse - 禁用子命令的帮助?

wuj*_*jek 5 python argparse

我在 Python 3.5.1 上使用 argparse。我不需要默认的帮助命令,因此我使用 ArgumentParser 构造函数的 add_help=False 参数禁用了它。然而,虽然应用程序的帮助命令已被删除,但子命令的帮助命令仍然存在。如何删除子命令/子解析器的帮助?

hpa*_*ulj 3

子解析器是在以下位置创建的:

class _SubParsersAction(Action):
    ....
    def add_parser(self, name, **kwargs):
        ...   
        # create the parser and add it to the map
        parser = self._parser_class(**kwargs)
        ...
Run Code Online (Sandbox Code Playgroud)

看起来我可以add_help=False在执行时传递参数add_parser。使用**kwargs,子解析器可以获得主解析器可以获得的大部分(如果不是全部)参数。

我得测试一下。

In [721]: p=argparse.ArgumentParser(add_help=False)
In [722]: sp=p.add_subparsers()
In [723]: p1=sp.add_parser('test',add_help=False)

In [724]: p.print_help()     # no -h for main
usage: ipython3 {test} ...

positional arguments:
  {test}

In [725]: p1.print_help()   # no -h for sub
usage: ipython3 test

In [727]: p.parse_args(['-h'])
usage: ipython3 {test} ...
ipython3: error: unrecognized arguments: -h
...
In [728]: p.parse_args(['test','-h'])
usage: ipython3 {test} ...
ipython3: error: unrecognized arguments: -h
Run Code Online (Sandbox Code Playgroud)