在我的脚本中搜索更快的方法来解析命令行参数时,我遇到了argh library。Python的argh库:保留帮助信息中的文档字符串格式
我真的很喜欢argh的功能,但是我遇到了一个阻碍我使用它的缺点,这与如果我调用-help选项时显示的默认帮助消息有关: per默认情况下,函数的文档字符串显示在参数列表的顶部。这很棒,但是最初的格式化会丢失。见,例如,下面的示例脚本
import argh
def func(foo=1, bar=True):
"""Sample function.
Parameters:
foo: float
An example argument.
bar: bool
Another argument.
"""
print foo, bar
argh.dispatch_command(func, argv=['-h'])
这将导致下面的输出
usage: script.py [-h] [-f FOO] [-b]
Sample function. Parameters: foo: float An example argument. bar: bool Another
argument.
optional arguments:
-h, --help show this help message and exit
-f FOO, --foo FOO
-b, --bar
是否有一个(简单)的方式来得到像下面这样的输出?
usage: script.py [-h] [-f FOO] [-b]
Sample function.
Parameters:
foo: float
An example argument.
bar: bool
Another argument.
optional arguments:
-h, --help show this help message and exit
-f FOO, --foo FOO
-b, --bar
我宁愿不使用注解来定义参数的帮助消息,因为这将需要我改变这两个函数的文档字符串和每个有什么改变时帮助文本。
感谢@hpaulj,这解决了我最初的问题(和immedately导致另一个),因为与变化'PARSER_FORMATTER = argparse.ArgumentDefaultsHelpFormatter'到'PARSER_FORMATTER = argparse.RawDescriptionHelpFormatter'我失去了让我的默认值显示的能力。有两种方法可以使用,即保留格式并查看可选参数旁边的默认值吗?另外,如果'ArgumentDefaultsHelpFormatter'是'PARSE_FORMATTER'的默认值,为什么我在示例的帮助信息中看不到'foo = 1'和'bar = True'的值? – nilfisque
在'constants.py','PARSER_FORMATTER = argparse.ArgumentDefaultsHelpFormatter'。此格式化程序在帮助行中包含默认值。所以随着变化,你获得了一个特征,并且松动了另一个。您可能必须构建自己的格式化程序类以获取这两个功能。 – hpaulj
谢谢,遵循[here](https://stackoverflow.com/questions/18462610/argumentparser-epilog-and-description-formatting-in-conjunction-with-argumentdef)的建议,确实可以生成一个继承自这两个格式化程序,并应导致两者的组合。不过,即使使用原始的'PARSER_FORMATTER = argparse.ArgumentDefaultsHelpFormatter',也不会打印任何默认值。 – nilfisque