我不熟悉argh,但显然它是argparse的包装器.我的猜测是它正在使用你的函数__doc__,并使其成为解析器的描述,例如
parser = argparse.ArgumentParser(description=func.__doc__)
argparse有一个RawDescriptionHelpFormatter,它按原样显示描述.
parser = argparse.ArgumentParser(description=func.__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter)
所以问题是,有没有办法让argh使用这个格式化程序?
这个argparse脚本产生了你想要的帮助:
import argparse
def func(foo=1, bar=True):
"""Sample function.
Parameters:
foo: float
An example argument.
bar: bool
Another argument.
"""
print foo, bar
parser = argparse.ArgumentParser(prog='script.py',
description=func.__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument('-f', '--foo', type=float)
parser.add_argument('-b', '--bar', action='store_false')
parser.print_help()
在argh / dispatching.py中
def dispatch_command(function, *args, **kwargs):
...
parser = argparse.ArgumentParser(formatter_class=PARSER_FORMATTER)
set_default_command(parser, function)
dispatch(parser, *args, **kwargs)
所以你可以设置:
PARSER_FORMATTER = argparse.RawDescriptionHelpFormatter
或编写自己的函数:
def raw_dispatch_command(function, *args, **kwargs):
...
parser = argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter)
set_default_command(parser, function)
dispatch(parser, *args, **kwargs)