根据PEP 257,命令行脚本的文档字符串应该是它的使用信息。
脚本(独立程序)的文档字符串应该可用作其“使用”消息,在使用不正确或缺少参数(或者可能使用“-h”选项,用于“帮助”)调用脚本时打印。这样的文档字符串应该记录脚本的函数和命令行语法、环境变量和文件。使用消息可以相当详细(几个屏幕已满),并且应该足以让新用户正确使用命令,以及对老练用户的所有选项和参数的完整快速参考。
所以我的文档字符串看起来像这样:
<工具名称> <版权信息> 用法:<prog name> [options] [args] 一些解释用法的文字... 选项: -h, --help 显示此帮助信息并退出 ...
现在我想使用 optparse 模块。optparse 生成“选项”部分和解释命令行语法的“用法”:
from optparse import OptionParser
if __name__ == "__main__":
parser = OptionParser()
(options, args) = parser.parse_args()
所以调用带有“-h”标志的脚本会打印:
用法:script.py [选项] 选项: -h, --help 显示此帮助信息并退出
这可以修改如下:
parser = OptionParser(usage="Usage: %prog [options] [args]",
description="some text explaining the usage...")
这导致
用法:script.py [选项] [参数] 一些解释用法的文字... 选项: -h, --help 显示此帮助信息并退出
但是我怎样才能在这里使用文档字符串呢?将文档字符串作为使用消息传递有两个问题。
- 如果文档字符串不以“Usage:”开头,则 optparse 会将“Usage:”附加到文档字符串中
- 占位符 '%prog' 必须在文档字符串中使用
结果
根据答案,似乎没有办法重用 optparse 模块预期的文档字符串。所以剩下的选择是手动解析文档字符串并构造OptionParser。(所以我会接受 S.Loot 的回答)
“Usage:”部分由 IndentedHelpFormatter 引入,可以替换为 OptionParser.__init__() 中的 formatter 参数。