自动添加的帮助参数具有选项字符串-h
和--help
。我想保留--help
的帮助参数,但从中删除-h
,这样我就可以将该选项字符串用于另一个参数。
我认为必须有一个更好的方法,而不是完全删除add_help=False
的帮助参数,然后立即用--help
和action="help"
再次添加它,对吧?也许我可以修改现有帮助参数的选项字符串?
顺便说一句,关于"不要删除-h
,因为用户希望它是--help
的别名":这是一个合理的论点。然而,在快速浏览本地二进制文件时,我找不到任何使用-h
来显示除fdisk
之外的帮助消息的命令。(当然,这并不意味着没有更多。(甚至更多:许多命令使用-h
来表示完全不同的东西,请参阅ls
、cd
、df
和diff
来命名其中的一些命令。
conflict_handler路由:
In [5]: parser=argparse.ArgumentParser(conflict_handler='resolve')
In [6]: parser.add_argument('-h','--handle',help='handle foobar',default='foo');
In [7]: parser.print_help()
usage: ipython3 [--help] [-h HANDLE]
optional arguments:
--help show this help message and exit
-h HANDLE, --handle HANDLE
handle foobar
resolve
只是更改了"-h",而不是"--help"。
使用新的"-h":
In [8]: parser.parse_args('-h bar'.split())
Out[8]: Namespace(handle='bar')
由于缩写仍然是允许的,带有一个破折号的"-help"会产生意想不到的结果:
In [9]: parser.parse_args('-help'.split())
Out[9]: Namespace(handle='elp')
正确的帮助:
In [10]: parser.parse_args('--help'.split())
usage: ipython3 [--help] [-h HANDLE]
optional arguments:
--help show this help message and exit
-h HANDLE, --handle HANDLE
handle foobar
An exception has occurred, use %tb to see the full traceback.
SystemExit: 0
/usr/local/lib/python3.6/dist-packages/IPython/core/interactiveshell.py:3327: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.
warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)
查看_handle_conflict_resolve
方法的代码,可以确切地了解它的作用。
也许我可以修改现有帮助参数的选项字符串?
仅举一例,修改现有参数的非常巧妙的方法:
>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.print_help()
usage: [-h]
optional arguments:
-h, --help show this help message and exit
>>> parser._actions[0].option_strings.remove("-h")
>>> parser._option_string_actions.pop("-h")
_HelpAction(option_strings=['--help'], dest='help', nargs=0, const=None, default='==SUPPRESS==', type=None, choices=None, help='show this help message and exit', metavar=None)
>>> parser.print_help()
usage: [--help]
optional arguments:
--help show this help message and exit
顺便说一下,不是
parser._actions[0].option_strings.remove("-h")
parser._option_string_actions.pop("-h")
你也可以使用_handle_conflict_resolve
:
parser._handle_conflict_resolve(None, [("-h", parser._actions[0])])
我认为必须有一种更好的方法,而不是用
add_help=False
完全删除帮助参数,然后立即用--help
和action="help"
再次添加它
为了完整起见,下面是它的工作方式:
>>> from argparse import ArgumentParser, SUPPRESS
>>> parser = ArgumentParser(add_help=False)
>>> parser.add_argument("--help", action="help", default=SUPPRESS, help="show this help message and exit")
_HelpAction(option_strings=['--help'], dest='help', nargs=0, const=None, default='==SUPPRESS==', type=None, choices=None, help='show this help message and exit', metavar=None)
>>> parser.print_help()
usage: [--help]
optional arguments:
--help show this help message and exit