我想将一个对象传递给一个新发起的烧瓶应用程序。我尝试按照问题解决方案:how-can-i-make-command-line-arguments-visible-to-flask-routes
修改
我想从命令行启动python脚本中获取一个值。
即。
$ run python flaskTest.py -a goo
我没有看到这与我试图复制的问题的解决方案之间的区别。 的修改
因此,我尝试了以下内容:
from flask import Flask
app = Flask(__name__)
print('Passed item: ', app.config.get('foo'))
if __name__ == '__main__':
from argparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument('-a')
args = parser.parse_args()
val = args.a
app.config['foo'] = val
app.run()
希望得到结果......
'Passed item: Goo'
是否有通过app.run()初始化任意对象的方法?
答案 0 :(得分:2)
脚本正在从上到下执行,因此您无法打印您尚未拥有的内容。将print语句放在经典的烧瓶工厂函数中允许您首先解析命令行,然后获取您的对象然后使用它:
from flask import Flask
def create_app(foo):
app = Flask(__name__)
app.config['foo'] = foo
print('Passed item: ', app.config['foo'])
return app
if __name__ == '__main__':
from argparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument('-a')
args = parser.parse_args()
foo = args.a
app = create_app(foo)
app.run()
答案 1 :(得分:1)
因此,问题是您在定义之前尝试访问值。在你的情况下你需要做这样的事情:
from flask import Flask
app = Flask(__name__)
app.config['foo'] = 'Goo'
print('Passed item: ', app.config['foo'])
if __name__ == '__main__':
app.run()
如果您在加载某个第三个模块时尝试访问该值,则需要提前在某处定义该值。