【问题标题】:How can I know the args passed to flask_script's Manager我怎么知道传递给 flask_script 的管理器的参数
【发布时间】:2019-09-02 14:03:35
【问题描述】:

我有一个烧瓶应用程序,在它的一个脚本命令中我想知道传递给管理器的参数是什么(而不是命令本身),我该怎么做?

$ cat manage.py

#!/usr/bin/env python

from flask import Flask
from flask_script import Manager

app = Flask(__name__)

manager = Manager(app)

manager.add_option("-d", "--debug", dest="debug", action="store_true")

@manager.option('-n', '--name', dest='name', default='joe')
def hello(name):
    # how can I know whether "-d|--debug" is passed in command line
    print("hello", name)

if __name__ == "__main__":
    manager.run()

如果我跑:

$ python manage.py --debug hello

我想检测'--debug' 是否通过hello 函数内的命令行参数传递。我不能只是改变

manager.add_option("-d", "--debug", dest="debug", action="store_true")    

到装饰器版本:

@manager.option('-d', '--debug', action='store_true', dest='debug')
@manager.option('-n', '--name', dest='name', default='joe')
def hello(name, debug=False):

因为'-d|--debug' 被许多命令共享。

【问题讨论】:

    标签: python flask flask-script


    【解决方案1】:

    全局选项不是传递给命令,而是传递给应用程序创建函数。

    请参阅add-option docs。

    为此,必须使用工厂函数而不是 Flask 实例来初始化管理器。否则您设置的任何选项都将被忽略。

    所以你需要做类似的事情

    app = Flask(__name__)
    
    def init_manager(debug):
        app.debug = debug
        return app
    
    manager = Manager(init_manager)
    

    然后访问app.debug

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多