为python脚本编写帮助

时间:2012-01-27 17:58:03

标签: python

我试图让我的python脚本非常友好,所以我想为它写一些帮助。你对此有何建议?我可以提出一些逻辑,如果用户作为脚本的参数传递帮助,他们会得到帮助。对此有最佳做法或惯例吗?

3 个答案:

答案 0 :(得分:32)

使用argparse

例如,使用 test.py

import argparse

parser=argparse.ArgumentParser(
    description='''My Description. And what a lovely description it is. ''',
    epilog="""All's well that ends well.""")
parser.add_argument('--foo', type=int, default=42, help='FOO!')
parser.add_argument('bar', nargs='*', default=[1, 2, 3], help='BAR!')
args=parser.parse_args()

运行

% test.py -h

产量

usage: test.py [-h] [--foo FOO] [bar [bar ...]]

My Description. And what a lovely description it is.

positional arguments:
  bar         BAR!

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

All's well that ends well.

答案 1 :(得分:7)

最佳做法是使用argparse来处理所有命令行参数。它包含一个默认的--help,您可以根据自己的喜好进行自定义。

这是最简单的例子:

import argparse

parser = argparse.ArgumentParser(description='This is my help')

args = parser.parse_args()

结果是:

% python argparse_test.py -h
usage: argparse_test.py [-h]

This is my help

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

您可以使用argparse定义所有参数,并为每个参数设置帮助消息。生成的过滤/验证参数由parser.parse_args()返回。

答案 2 :(得分:0)

内置argparse的替代方法是名为Click的第三方软件包,该软件包具有“ 自动帮助页面生成”和“ 任意嵌套命令”的功能。 >”(还会生成嵌套的帮助页面)。在内部,it's based on argparse,但是对我来说,使用装饰器使创建复杂的CLI更加方便。

这是示例代码:

import click

@click.command()
@click.option("-t", "--type", default="int", help="Data type of operands")
def combine(type):
    """Combines operands into a single element"""
    print("This method should do something")


if __name__ == "__main__":
    combine()

以及生成的帮助页面:

$ python myapp.py --help
Usage: myapp.py [OPTIONS]

  Combines operands into a single element

Options:
  -t, --type TEXT  Data type of operands
  --help           Show this message and exit.

关于它的一件好事是它使用方法docstrings作为帮助页面的一部分,如果您还需要从docstrings生成代码文档,这将很方便。

您还可以具有嵌套的命令组:

import click

@click.command()
@click.argument("numbers", nargs=-1)
@click.option("-e", help="Extra option for add")
def add(numbers, e):
    """Adds numbers"""
    print(f"This method should add {numbers}")

@click.command()
@click.option("-e", help="Extra option for mul")
def mul(e):
    """Multiplies numbers"""
    print("This method should multiply numbers")

@click.group()
def calc():
    pass

calc.add_command(add)
calc.add_command(mul)

if __name__ == "__main__":
    calc()

它将产生嵌套的帮助页面:

$ python myapp.py --help
Usage: myapp.py [OPTIONS] COMMAND [ARGS]...

Options:
  --help  Show this message and exit.

Commands:
  add  Adds numbers
  mul  Multiplies numbers

$ python myapp.py add --help
Usage: myapp.py add [OPTIONS] [NUMBERS]...

  Adds numbers

Options:
  -e TEXT  Extra option for add
  --help   Show this message and exit.

$ python myapp.py mul --help
Usage: myapp.py mul [OPTIONS]

  Multiplies numbers

Options:
  -e TEXT  Extra option for mul
  --help   Show this message and exit.