在argparse的'--help'中显示pydoc的描述

28

我在我的脚本中使用了argparse.ArgumentParser(),我想在argparse的'--help'选项中显示脚本的pydoc描述。

一种可能的解决方案是使用ArgumentParser的formatter_classdescription属性来配置帮助信息的显示。但在这种情况下,我们需要内部使用'pydoc'命令来获取描述。

我们还有其他一些(可能更优雅)的方法吗?


嗯,__doc__ 对我来说已经足够了。谢谢!除了使用 formatter_class/description,还有其他的方法吗? - baky
2个回答

45

您可以从__doc__全局变量中检索脚本的文档字符串。要将其添加到脚本的帮助中,请设置解析器的description参数。

"""My python script

Script to process a file
"""

p = argparse.ArgumentParser(description=__doc__,
                            formatter_class=argparse.RawDescriptionHelpFormatter)
p.add_argument('foo', help="Name of file to process")
p.parse_args()

那么帮助将会是这个样子:

$ python tmp.py --help
usage: tmp.py [-h] foo

My python script

Script to process a file

positional arguments:
  foo         Name of file to process

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

您可以使用epilog关键字参数替代description,将文档字符串移到帮助的结尾,而不是紧随用法字符串之后。


7
如果函数有多行文档字符串,该描述将被合并成一行。最好使用ArgumentParser(usage=__doc__) - Viktor Kerkez
1
哦,对了。您需要设置 formatter_class=argparse.RawDescriptionHelpFormatter 以保留格式。恐怕我只是在重复他已经尝试过的东西。 - chepner

0

有一个优雅的argparse包装器,允许在命令行界面中使用Python函数docstring作为命令帮助:dsargparse

它聪明地保留函数docstring的描述部分,而不是参数部分,这可能与您的命令无关。

如其Readme所述:

dsargparse是argparse库的一个包装器,它从docstrings准备帮助和描述。它还设置了每个子命令要运行的函数,并提供了一个帮助函数,该函数解析args并运行所选命令。使用此库,您无需在docstrings、帮助和描述中编写相同的文本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接