关于python:Flask不会打印到控制台

Flask doesn't print to console

我是flask的新手,我正尝试添加打印信息以调试服务器端代码。
使用debug = True启动Flask应用程序时,我无法将任何信息打印到控制台

我尝试改用日志记录,但没有成功。
那么如何使用控制台调试烧瓶程序。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@app.route('/getJSONResult', methods=['GET', 'POST'])
def getJSONResult():

    if request.method == 'POST':
        uut = request.form['uut']
        notes = request.form['notes']
        temperature = request.form['temperature']

        logging.info("enter getJSONReuslt")
        print('enter getJSONReuslt')
        filter_by_query = {k: v for k, v in {
            'uut': uut, 'notes': notes, 'temperature': temperature}.items() if v !=""}
        s = session.query(UUT_TEST_INFO).filter_by(**filter_by_query).first()
        return jsonify(s.serialize)

if __name__ == '__main__':
    app.secret_key = ''.join(random.choice(
        string.ascii_uppercase + string.digits) for x in range(32))
    app.debug = True
    app.run(host='127.0.0.1', port=5000)


> 127.0.0.1 - - [07/Jun/2017 15:20:48]"GET /qyer HTTP/1.1" 200 -
> 127.0.0.1 - - [07/Jun/2017 15:20:48]"GET /static/css/bootstrap.min.css HTTP/1.1" 200 -
> 127.0.0.1 - - [07/Jun/2017 15:20:48]"GET /static/js/bootstrap.min.js HTTP/1.1" 200 -
> 127.0.0.1 - - [07/Jun/2017 15:20:51]"GET /static/css/bootstrap.min.css.map HTTP/1.1" 200 -
> 127.0.0.1 - - [07/Jun/2017 15:21:58]"POST /getJSONResult HTTP/1.1" 500 -

我修复了服务器端500错误的问题,现在请求获取200代码,并且控制台显示以下信息

1
2
3
4
5
6
7
8
$ python project.py
INFO:werkzeug: * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
INFO:werkzeug: * Restarting with stat
WARNING:werkzeug: * Debugger is active!
INFO:werkzeug: * Debugger pin code: 158-624-607
INFO:werkzeug:127.0.0.1 - - [08/Jun/2017 11:33:33]"GET /qyer HTTP/1.1" 200 -
INFO:root:Enter getJSONResult
INFO:werkzeug:127.0.0.1 - - [08/Jun/2017 11:33:43]"POST /getJSONResult HTTP/1.1" 200 -

仍然没有来自打印命令的信息


尝试一下,看看是否有帮助:

对于python2:

1
2
3
4
5
from __future__ import print_function
import sys

print('This is error output', file=sys.stderr)
print('This is standard output', file=sys.stdout)

对于python3,您无需从以后的print_function中导入:

1
2
3
4
import sys

print('This is error output', file=sys.stderr)
print('This is standard output', file=sys.stdout)

查看是否有助于打印到控制台。


您可以强制直接从打印中刷新标准输出:

1
print('enter getJSONReuslt', flush=True)

这样,您不必打印到sys.stderr(默认情况下会刷新)。

您的问题的原因是行缓冲。行缓冲使I / O效率更高,但缺点是在某些情况下不能立即显示打印内容。


默认情况下,日志记录级别为警告。因此,您将不会看到级别为DEBUG的日志记录消息。要解决此问题,只需使用日志记录模块的basicConfig()功能启用调试日志记录:

1
2
import logging
logging.basicConfig(level=logging.DEBUG)


有相同的打印问题。在print之后使用sys.stdout.flush()解决了该问题。


您可以在开发模式下使用应用程序实例,因为日志记录级别设置为DEBUG
app.logger.info('This is info output')
在生产模式下,您需要使用更高的服务器级别,或者可以将日志记录级别设置为DEBUG

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from flask import Flask
import logging

app = Flask(__name__)

logging.basicConfig(level=logging.DEBUG)

@app.route('/')
def hello_world():
    app.logger.info('Processing default request')
    return 'Hello World!'

if __name__ == '__main__':
    app.run()

本文讨论登录烧瓶https://www.scalyr.com/blog/getting-started-quickly-with-flask-logging/