В источниках flask_script
вы можете видеть, что ошибка "too many arguments"
предотвращается, когда исполняемый Command
имеет атрибут capture_all_args
, установленный на True
, который нигде не задокументирован.
Вы можете установить этот атрибут в классе непосредственно перед запуском менеджера
if __name__ == "__main__":
from flask.ext.script import Command
Command.capture_all_args = True
manager.run()
Таким образом, всегда принимаются дополнительные аргументы менеджеру.
Недостатком этого быстрого исправления является то, что вы больше не можете регистрировать параметры или аргументы для команд обычным способом.
Если вам все еще нужна эта функция, вы можете создать подкласс Manager
и переопределить декоратор command
следующим образом.
class MyManager(Manager):
def command(self, capture_all=False):
def decorator(func):
command = Command(func)
command.capture_all_args = capture_all
self.add_command(func.__name__, command)
return func
return decorator
Затем вы можете использовать декоратор command
следующим образом:
@manager.command(True) # capture all arguments
def use_all(*args):
print("args:", args[0])
@manager.command() # normal way of registering arguments
def normal(name):
print("name", name)
Обратите внимание, что по какой-то причине flask_script
требует, чтобы use_all
принимал varargs, но будет хранить список аргументов в args[0]
, что немного странно. def use_all(args):
не работает и не работает с TypeError "got multiple values for argument 'args'"
person
Wombatz
schedule
10.02.2016
python
остается постоянным, вы можете просто передатьargv[3:]
изsys
- person Wombatz   schedule 10.02.2016