gpt4 book ai didi

Python 的 argh 库 : preserve docstring formatting in help message

转载 作者:太空狗 更新时间:2023-10-29 21:34:29 24 4
gpt4 key购买 nike

在寻找更快的方法来解析我的脚本中的命令行参数时,我遇到了 argh library .

我真的很喜欢 argh 的功能,但我遇到了一个阻止我使用它的缺点,这与我调用 --help 选项时显示的默认帮助消息有关:默认情况下,函数的文档字符串显示在参数列表的顶部。这很好,但是初始格式丢失了。例如,请参见以下示例脚本

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

我宁愿不使用注释来定义参数帮助消息,因为每次需要更改时,这都需要我更改函数的文档字符串和帮助文本。

最佳答案

我不熟悉 argh,但显然它是 argparse 的包装器。我的猜测是它正在使用您的函数 __doc__,并使其成为解析器的 description,例如

parser = argparse.ArgumentParser(description=func.__doc__)

https://docs.python.org/2.7/library/argparse.html#argparse.RawDescriptionHelpFormatter

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)

关于Python 的 argh 库 : preserve docstring formatting in help message,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23567393/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com