2 veya daha fazla argüman içeren özel Flask CLI komutları nasıl oluşturulur?
Özel bir Flask CLI komutu yapmak istiyorum. Yalnızca 1 bağımsız değişkenle kullandığımda iyi çalışıyor, ancak 2 veya daha fazla bağımsız değişken için çalışmıyor. Aşağıdaki kodu kullanıyorum ve 2 veya daha fazla argüman için başarısız oluyor:
# Usage: flask power 2 3
# Output: 6
@app.cli.command()
@click.argument('x','y')
def power(x, y):
print(int(x)**int(y))
Aşağıdaki kod sadece 1 parametre ile sorunsuz çalışıyor
# Usage: flask power 2
# Output: 6
@app.cli.command()
@click.argument('x')
def power(x):
print(int(x)**3)
2 veya daha fazla argüman koduyla üretilen hata şudur:
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
Bu yöntemde 2 bağımsız değişkeni kabul etme komutunu nasıl yaparım? Bir yerde hata mı yapıyorum? Yardım çok takdir edilecektir.
BluePrint kullanan bazı çözümler gördüm ve işimi çalıştırmak için Blueprint kullanmak istemiyorum! Yukarıdaki kodun kullanımı basit ve kullanışlıdır. Nerede ve neyi yanlış yaptığımı anlayamadım !! Ekstra yardım çok takdir edilmektedir!
Yanıtlar
@click.arguments
bu şekilde birden fazla parametre kabul etmez.
Bunun yerine kullanın
@app.cli.command()
@click.argument('x', nargs=1)
@click.argument('y', nargs=1)
def power(x, y):
print(int(x)**int(y))
Buradaki belgelere bakın .