蟒蛇点击应用与“失踪的说法”的指示失败,但无法找到问题(python click app is fa

2019-09-27 14:46发布

我创建与应用Click在Python 3.6。 我似乎有一个,我找不到一个错误。 我在下面贴出我的代码。

问题是,当我输入:

python clickapp.py --help

一切都很好。 但是,当我键入

python clickapp.py simplerequest --help

我得到的指示,我很想念的说法“目录”的错误,但没有回溯指示错误的来源。 最终结果将是:

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={})

任何人都可以看到错误的根源?

我试了几件事情:

  1. 我删除了type=click.Path(exists=True)arg2来看看是否有可能会造成问题。 但是这并没有改变任何东西。

  2. 我还试图删除围绕插入变量到一些验证逻辑ctx字典,但这并没有帮助。

Answer 1:

您帮助分析问题是,点击试图填补startdate endate directory参数第一。

所以,你的simplerequest --help填补了前两个,然后抱怨说,第三( directory )丢失。

一般命令( simplerequest )将第一个参数。 然后,您可以前添加可选指定参数时,因为点击可以很容易地分辨那些命令。

或者你可以强制点击看第一个参数是一个有效的命令和闲着的帮助,但这是非标准,将需要一些代码。 此外,它会排除命令名称为起始日期,虽然他们可能很容易区分。



文章来源: python click app is failing with indication of “missing argument” but cannot locate the issue