如文档中所述,optparse.OptionParser
使用IndentedHelpFormatter
输出格式化选项帮助,为此我找到了一些API 文档。
我想在用法文本中为所需的位置参数显示类似格式的帮助文本。是否有可用于类似位置参数格式的适配器或简单的使用模式?
澄清
最好只使用标准库。Optparse 做得很好,除了这个格式的细微差别,我觉得我们应该能够在不导入整个其他包的情况下修复它。:-)
最好的办法是给 optparse 模块写一个补丁。同时,您可以通过稍微修改的 OptionParser 类来完成此操作。这并不完美,但它会得到你想要的。
#!/usr/bin/env python
from optparse import OptionParser, Option, IndentedHelpFormatter
class PosOptionParser(OptionParser):
def format_help(self, formatter=None):
class Positional(object):
def __init__(self, args):
self.option_groups = []
self.option_list = args
positional = Positional(self.positional)
formatter = IndentedHelpFormatter()
formatter.store_option_strings(positional)
output = ['\n', formatter.format_heading("Positional Arguments")]
formatter.indent()
pos_help = [formatter.format_option(opt) for opt in self.positional]
pos_help = [line.replace('--','') for line in pos_help]
output += pos_help
return OptionParser.format_help(self, formatter) + ''.join(output)
def add_positional_argument(self, option):
try:
args = self.positional
except AttributeError:
args = []
args.append(option)
self.positional = args
def set_out(self, out):
self.out = out
def main():
usage = "usage: %prog [options] bar baz"
parser = PosOptionParser(usage)
parser.add_option('-f', '--foo', dest='foo',
help='Enable foo')
parser.add_positional_argument(Option('--bar', action='store_true',
help='The bar positional argument'))
parser.add_positional_argument(Option('--baz', action='store_true',
help='The baz positional argument'))
(options, args) = parser.parse_args()
if len(args) != 2:
parser.error("incorrect number of arguments")
pass
if __name__ == '__main__':
main()
你从运行这个得到的输出:
Usage: test.py [options] bar baz
Options:
-h, --help show this help message and exit
-f FOO, --foo=FOO Enable foo
Positional Arguments:
bar The bar positional argument
baz The baz positional argument
试着看看argparse。文档说它支持位置参数和更好看的帮助信息。
我会对这个问题的干净解决方案感兴趣;我想不出一个。OptionParser 真的完全专注于选项;据我所知,它没有给你任何使用位置参数的东西。
我所做的是为我的每个位置参数生成一个小文档块列表,使用\t
s 来获得正确的间距。然后我用换行符加入它们,并将其附加到传递给 OptionParser 的“使用”字符串中。
它看起来不错,但感觉很傻,当然,文档最终出现在选项列表的上方。我还没有找到解决这个问题的任何方法,或者如何做任何复杂的事情,即在位置参数的描述下方描述了一组给定的选项,因为它们仅适用于该参数。
我查看了猴子修补 OptionParser 的方法,我记得(大约一年前)它不会那么困难,但我不想走那条路。
大多数位置参数的帮助文本类似于 *NIX 框的手册页中经常使用的格式。看看'cp' 命令是如何记录的。您的帮助文本应该与此类似。
否则,只要您在使用解析器时填写“帮助”参数,文档就会自行生成。