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