【问题标题】:Python: how to add '-help' to argparse help command list?Python:如何在 argparse 帮助命令列表中添加“-help”?
【发布时间】:2019-11-25 06:21:30
【问题描述】:

有没有办法在 argparse 帮助列表中包含“-help”命令?

如果我正在输入“-help”,我希望在输出上有类似的内容。

optional arguments:
-h, -help, --help            show this help message and exit

谢谢

【问题讨论】:

  • -help 不是argparse 的有效参数形式。一个字母应该是一个破折号,一个单词应该是双破折号。 -help 将是四个参数,help
  • 并且有充分的理由:他们会违反POSIX conventions
  • 如果您的用户不知道如何指定-h--help,那么我认为他们能够正确使用该工具的希望不大;)
  • @khelwood 你试过了吗?我做了一个快速测试,用一个破折号定义了一个多字母选项,它似乎有效。
  • @TomKarzes 是的,你是对的,它似乎确实有效。 argparse 将尽最大努力解析这些参数,但由于解析不明确,可能会导致错误。

标签: python python-2.7 argparse


【解决方案1】:

虽然可以这样做,但不建议这样做。单破折号仅用于单个字母。一般来说,您应该遵循建议,因为它们的存在是有原因的。

如果你真的想添加它,你可以这样做:

parser.add_argument("-help", action="help")

【讨论】:

  • 这是最简单的。缺点是帮助参数在帮助和用法中出现了两次。
【解决方案2】:

正如@Akaisteph7 建议的那样:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-help', action="help", help="second help :)")
parser.add_argument('-f', '--foo')

parser.print_help()

0945:~/mypy$ python3 stack57058526.py 
usage: stack57058526.py [-h] [-help] [-f FOO]

optional arguments:
  -h, --help         show this help message and exit
  -help              second help :)
  -f FOO, --foo FOO

改为:

parser = argparse.ArgumentParser(add_help=False)
parser.add_argument('-h','--help','-help', action="help", help="replacement help")

0946:~/mypy$ python3 stack57058526.py 
usage: stack57058526.py [-h] [-f FOO]

optional arguments:
  -h, --help, -help  replacement help
  -f FOO, --foo FOO

将“-help”标志添加到默认帮助需要修改几个“私有”属性:

parser = argparse.ArgumentParser()
parser._actions[0].option_strings += ['-help']                                                          
parser._option_string_actions['-help'] = parser._option_string_actions['-h']  

0947:~/mypy$ python3 stack57058526.py 
usage: stack57058526.py [-h] [-f FOO]

optional arguments:
  -h, --help, -help  show this help message and exit
  -f FOO, --foo FOO

如果您想将此更改构建到您的本地版本 argparse,您可以在 ArgumentParser.__init__ 方法中修改此代码块:

    if self.add_help:
        self.add_argument(
            default_prefix+'h', default_prefix*2+'help',
            action='help', default=SUPPRESS,
            help=_('show this help message and exit'))

您是更改 argparse.py 的本地副本还是更改 ArgumentParser 的子类取决于您。

【讨论】:

    猜你喜欢
    • 2016-09-18
    • 2021-09-16
    • 2021-11-14
    • 2021-07-02
    • 1970-01-01
    • 2013-03-08
    • 2018-10-05
    • 2022-12-18
    • 2012-11-27
    相关资源
    最近更新 更多