首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何创建带有2个或多个参数的自定义Flask命令?

如何创建带有2个或多个参数的自定义Flask命令?
EN

Stack Overflow用户
提问于 2020-08-15 11:51:44
回答 1查看 2.2K关注 0票数 1

我想做一个自定义的烧瓶CLI命令。当我只使用一个参数时,它工作得很好,但是对于2个或更多的参数,它不起作用。我正在使用下面的代码,对于2个或多个参数,它会失败:

代码语言:javascript
运行
复制
# Usage: flask power 2 3 
# Output: 6
@app.cli.command()
@click.argument('x','y')
def power(x, y):
  print(int(x)**int(y))

下面的代码只使用一个参数就可以正常工作

代码语言:javascript
运行
复制
# Usage: flask power 2
# Output: 6
@app.cli.command()
@click.argument('x')
def power(x):
  print(int(x)**3)

使用2个或多个参数代码再现的错误是:

代码语言:javascript
运行
复制
flask power 2 3
Traceback (most recent call last):
  File "/home/user/.local/bin/flask", line 8, in <module>
    sys.exit(main())
  File "/home/user/.local/lib/python3.5/site-packages/flask/cli.py", line 894, in main
    cli.main(args=args, prog_name=name)
  File "/home/user/.local/lib/python3.5/site-packages/flask/cli.py", line 557, in main
    return super(FlaskGroup, self).main(*args, **kwargs)
  File "/home/user/.local/lib/python3.5/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/home/user/.local/lib/python3.5/site-packages/click/core.py", line 1254, in invoke
    cmd_name, cmd, args = self.resolve_command(ctx, args)
  File "/home/user/.local/lib/python3.5/site-packages/click/core.py", line 1297, in resolve_command
    cmd = self.get_command(ctx, cmd_name)
  File "/home/user/.local/lib/python3.5/site-packages/flask/cli.py", line 515, in get_command
    rv = info.load_app().cli.get_command(ctx, name)
  File "/home/user/.local/lib/python3.5/site-packages/flask/cli.py", line 372, in load_app
    app = locate_app(self, import_name, name)
  File "/home/user/.local/lib/python3.5/site-packages/flask/cli.py", line 235, in locate_app
    __import__(module_name)
  File "/projects/challenge/myflaskproj/__init__.py", line 6, in <module>
    from myflaskproj.commands import power, repeat
  File "/projects/challenge/myflaskproj/commands.py", line 6, in <module>
    @click.argument('x','y')
  File "/home/user/.local/lib/python3.5/site-packages/click/decorators.py", line 168, in decorator
    _param_memo(f, ArgumentClass(param_decls, **attrs))
  File "/home/user/.local/lib/python3.5/site-packages/click/core.py", line 1984, in __init__
    Parameter.__init__(self, param_decls, required=required, **attrs)
  File "/home/user/.local/lib/python3.5/site-packages/click/core.py", line 1483, in __init__
    param_decls or (), expose_value
  File "/home/user/.local/lib/python3.5/site-packages/click/core.py", line 2019, in _parse_decls
    " {}".format(len(decls))
TypeError: Arguments take exactly one parameter declaration, got 2

如何使命令在此方法中接受2个参数?我是不是在哪里搞错了?我将非常感谢你的帮助。

我看到了一些使用BluePrint的解决方案,我不想使用蓝图让我的工作运行!以上代码使用简单方便。我不知道我在哪里做错了什么!额外的帮助是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-15 15:07:57

@click.arguments不以这种方式接受多个参数。

相反,使用

代码语言:javascript
运行
复制
@app.cli.command()
@click.argument('x', nargs=1)
@click.argument('y', nargs=1)
def power(x, y):
    print(int(x)**int(y))

请参阅文档这里

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63425726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档