python 点击应用程序失败并显示 "missing argument" 但无法找到问题所在
python click app is failing with indication of "missing argument" but cannot locate the issue
我正在 python 3.6 中使用 Click
创建一个应用程序。我似乎有一个我找不到的错误。我已经在下面发布了我的代码。
问题是当我输入:
python clickapp.py --help
一切都很好。但是当我输入
python clickapp.py simplerequest --help
我收到一个错误,指出我缺少参数 "directory",但没有回溯来指示错误的来源。确切的输出是:
Usage: clickapp.py [OPTIONS] STARTDATE ENDDATE DIRECTORY COMMAND [ARGS]...
Error: Missing argument "directory".
这是我使用的代码。这是文件名 clickapp.py
.
的最小示例
import click
@click.group()
@click.argument('startdate')
@click.argument('enddate')
@click.argument('directory', type=click.Path())
@click.pass_context
def cli(ctx,
startdate,
enddate,
directory):
ctx.obj['directory'] = directory
ctx.obj['startdate'] = startdate
ctx.obj['enddate'] = enddate
@click.command()
@click.argument('arg1', type=str)
@click.argument('arg2', type=click.Path(exists=True))
@click.argument('arg3', type=int)
@click.pass_context
def SimpleRequest(ctx,
arg1,
arg2,
arg3):
"""Simple request processor"""
ctx.obj['arg1'] = arg1
ctx.obj['arg2'] = arg2
ctx.obj['arg3'] = arg3
cli.add_command(SimpleRequest)
if __name__ == '__main__':
cli(obj={})
谁能看出错误的来源?
我尝试了一些东西:
我删除了 arg2
中的 type=click.Path(exists=True)
以查看这是否可能导致问题。但这并没有改变任何东西。
我还尝试删除一些有关将变量插入 ctx
字典的验证逻辑,但这也无济于事。
您的帮助解析问题是 click 试图首先填写 startdate endate directory
参数。
因此您的 simplerequest --help
填写了前两个,然后它抱怨说缺少第三个 (directory
)。
通常命令 (simplerequest
) 是第一个参数。然后,您可以在之前添加可选参数,因为单击可以很容易地将这些参数与命令区分开来。
或者您可以强制单击以将第一个 arg 视为有效命令并执行帮助,但这是非标准的,需要一些代码。它还会排除命令名称作为开始日期,尽管它们很可能很容易区分。
我正在 python 3.6 中使用 Click
创建一个应用程序。我似乎有一个我找不到的错误。我已经在下面发布了我的代码。
问题是当我输入:
python clickapp.py --help
一切都很好。但是当我输入
python clickapp.py simplerequest --help
我收到一个错误,指出我缺少参数 "directory",但没有回溯来指示错误的来源。确切的输出是:
Usage: clickapp.py [OPTIONS] STARTDATE ENDDATE DIRECTORY COMMAND [ARGS]...
Error: Missing argument "directory".
这是我使用的代码。这是文件名 clickapp.py
.
import click
@click.group()
@click.argument('startdate')
@click.argument('enddate')
@click.argument('directory', type=click.Path())
@click.pass_context
def cli(ctx,
startdate,
enddate,
directory):
ctx.obj['directory'] = directory
ctx.obj['startdate'] = startdate
ctx.obj['enddate'] = enddate
@click.command()
@click.argument('arg1', type=str)
@click.argument('arg2', type=click.Path(exists=True))
@click.argument('arg3', type=int)
@click.pass_context
def SimpleRequest(ctx,
arg1,
arg2,
arg3):
"""Simple request processor"""
ctx.obj['arg1'] = arg1
ctx.obj['arg2'] = arg2
ctx.obj['arg3'] = arg3
cli.add_command(SimpleRequest)
if __name__ == '__main__':
cli(obj={})
谁能看出错误的来源?
我尝试了一些东西:
我删除了
arg2
中的type=click.Path(exists=True)
以查看这是否可能导致问题。但这并没有改变任何东西。我还尝试删除一些有关将变量插入
ctx
字典的验证逻辑,但这也无济于事。
您的帮助解析问题是 click 试图首先填写 startdate endate directory
参数。
因此您的 simplerequest --help
填写了前两个,然后它抱怨说缺少第三个 (directory
)。
通常命令 (simplerequest
) 是第一个参数。然后,您可以在之前添加可选参数,因为单击可以很容易地将这些参数与命令区分开来。
或者您可以强制单击以将第一个 arg 视为有效命令并执行帮助,但这是非标准的,需要一些代码。它还会排除命令名称作为开始日期,尽管它们很可能很容易区分。