我编写了以下示例代码来演示我的问题。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-v', '--version', action='version',
version='%(prog)s 1.0')
parser.parse_args()
这将产生以下帮助消息。
$ python foo.py --help
usage: foo.py [-h] [-v]
optional arguments:
-h, --help show this help message and exit
-v, --version show program's version number and exit
我要自定义此帮助输出,以便将所有短语和句子都大写,并在句号后面加句号。换句话说,我希望这样生成帮助消息。
$ python foo.py --help
Usage: foo.py [-h] [-v]
Optional arguments:
-h, --help Show this help message and exit.
-v, --version Show program's version number and exit.
这是我可以使用argparse API进行控制的东西。如果是这样,怎么办?您能否提供一个小例子来说明如何做到这一点?
最佳答案
首先:大写这些短语时,约定俗成的字眼,而argparse
并不是真正帮助您轻松更改这些字符串的工具。您在这里有三种不同的字符串类:帮助格式化程序的样板文本,节标题和每个特定选项的帮助文本。所有这些字符串都可以本地化;您可以通过 gettext()
module support为所有这些字符串提供“大写”翻译。就是说,如果您有足够的决心和read the source code a little,则可以深入并替换所有这些字符串。version
操作包含默认的help
文本,但是您可以通过设置help
参数来提供自己的文本。 help
操作也是如此;如果将 add_help
argument设置为False
,则可以手动添加该操作:
parser = argparse.ArgumentParser(add_help=False)
parser.add_argument('-v', '--version', action='version',
version='%(prog)s 1.0', help="Show program's version number and exit.")
parser.add_argument('-h', '--help', action='help', default=argparse.SUPPRESS,
help='Show this help message and exit.')
接下来,
optional arguments
消息是一个组标题;每个解析器都有两个默认组,一个用于位置参数,另一个用于可选。您可以通过属性_positionals
和_optionals
来实现,这两个属性都具有title
属性:parser._positionals.title = 'Positional arguments'
parser._optionals.title = 'Optional arguments'
请注意,通过访问以下划线开头的名称,您正在冒险使用未记录的模块私有(private)API,并且您的代码可能在将来的更新中中断。
最后,要更改
usage
字符串,您必须将帮助格式化程序子类化。将子类作为 formatter_class
argument传入:class CapitalisedHelpFormatter(argparse.HelpFormatter):
def add_usage(self, usage, actions, groups, prefix=None):
if prefix is None:
prefix = 'Usage: '
return super(CapitalisedHelpFormatter, self).add_usage(
usage, actions, groups, prefix)
parser = argparse.ArgumentParser(formatter_class=CapitalisedHelpFormatter)
演示,将所有这些放在一起:
>>> import argparse
>>> class CapitalisedHelpFormatter(argparse.HelpFormatter):
... def add_usage(self, usage, actions, groups, prefix=None):
... if prefix is None:
... prefix = 'Usage: '
... return super(CapitalisedHelpFormatter, self).add_usage(
... usage, actions, groups, prefix)
...
>>> parser = argparse.ArgumentParser(add_help=False, formatter_class=CapitalisedHelpFormatter)
>>> parser._positionals.title = 'Positional arguments'
>>> parser._optionals.title = 'Optional arguments'
>>> parser.add_argument('-v', '--version', action='version',
... version='%(prog)s 1.0', help="Show program's version number and exit.")
_VersionAction(option_strings=['-v', '--version'], dest='version', nargs=0, const=None, default='==SUPPRESS==', type=None, choices=None, help="Show program's version number and exit.", metavar=None)
>>> parser.add_argument('-h', '--help', action='help', default=argparse.SUPPRESS,
... help='Show this help message and exit.')
_HelpAction(option_strings=['-h', '--help'], dest='help', nargs=0, const=None, default='==SUPPRESS==', type=None, choices=None, help='Show this help message and exit.', metavar=None)
>>> print(parser.format_help())
Usage: [-v] [-h]
Optional arguments:
-v, --version Show program's version number and exit.
-h, --help Show this help message and exit.
关于python - 自定义argparse帮助消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35847084/