如何从Flask @ app.route打印到python控制台

Rob*_*ter 70 python flask

我想在用户调用/ button之后向python控制台打印一个"hello world".

这是我天真的做法:

@app.route('/button/')
def button_clicked():
    print 'Hello world!'
    return redirect('/')
Run Code Online (Sandbox Code Playgroud)

背景:我想从flask(而不是shell)执行其他python命令."打印"应该是最简单的情况.我相信我还没有理解这里的基本转折.提前致谢!

小智 101

看起来你已经解决了问题,但对于寻找这个答案的其他人来说,一个简单的方法就是打印到stderr.你可以这样做:

from __future__ import print_function # In python 2.7
import sys

@app.route('/button/')
def button_clicked():
    print('Hello world!', file=sys.stderr)
    return redirect('/')
Run Code Online (Sandbox Code Playgroud)

Flask将在控制台中显示打印到stderr的内容.有关打印到stderr的其他方法,请参阅此stackoverflow文章


Vir*_*oop 17

我们还可以使用日志记录在控制台上打印数据.

例:

import logging
from flask import Flask

app = Flask(__name__)

@app.route('/print')
def printMsg():
    app.logger.warning('testing warning log')
    app.logger.error('testing error log')
    app.logger.info('testing info log')
    return "Check your console"

if __name__ == '__main__':
    app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)

  • 如果您无法使信息记录器正常工作,请参阅此内容:https://flask.palletsprojects.com/en/1.0.x/logging/ (4认同)

Chr*_*ris 15

我认为 Flask 的核心问题是 stdout 被缓冲。我能够使用print('Hi', flush=True). 您还可以通过设置PYTHONUNBUFFERED环境变量(任何非空字符串)来禁用缓冲。