python - 如何使用 2 个或更多参数创建自定义 Flask CLI 命令?
问题描述
我想做一个自定义的 Flask CLI 命令。当我只使用 1 个参数时它工作正常,但它不适用于 2 个或更多参数。我正在使用以下代码,但对于 2 个或更多参数它会失败:
# Usage: flask power 2 3
# Output: 6
@app.cli.command()
@click.argument('x','y')
def power(x, y):
print(int(x)**int(y))
以下代码仅使用 1 个参数即可正常工作
# Usage: flask power 2
# Output: 6
@app.cli.command()
@click.argument('x')
def power(x):
print(int(x)**3)
使用 2 个或更多参数代码重现的错误是:
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 的解决方案,但我不想使用 Blueprint 来运行我的工作!上面的代码使用起来简单方便。我不知道我在哪里做错了!非常感谢您的额外帮助!
解决方案
@click.arguments
这种方式不接受多个参数。
相反,使用
@app.cli.command()
@click.argument('x', nargs=1)
@click.argument('y', nargs=1)
def power(x, y):
print(int(x)**int(y))
请参阅此处的文档。
推荐阅读
- r - 在忽略 NA 的同时合并列
- python - os.system 直到在 python 中输入才起作用
- python - 为什么standardscaler在不同数量的特征下效果不同
- java - java - 如何在java removeIf中流式传输已删除的项目?
- json - JSON解析器允许字符串中的换行符?
- python - Python - 如何四舍五入到指定的小数
- python - 如果多个实例处于活动状态,Python 子进程命令不会等待
- spring-batch - 我的弹簧批处理步骤在达到构建后一直循环
- python - 通知时未从喙回调中获取所有字节
- oracle11g - sqldeveloper 打不开