Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Flask doesn't print to console

Tags:

python

flask

Try this and see if it helps:

For python2:

from __future__ import print_function
import sys

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

For python3 you don't need to import from future print_function:

import sys

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

See if it helps to print to console.


You can force to flush stdout directly from print:

print('enter getJSONReuslt', flush=True)

This way you don't have to print to sys.stderr (which flushes by default).

The reason for your problem is line buffering. Line buffering makes I/O more efficient with the drawback of not immediately showing prints under some conditions.


By default the level for logging is warning. So you won't see a logging message of level DEBUG. To fix this just enable debug logging with the basicConfig() function of the logging module:

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

Had the same printing problem. Using sys.stdout.flush() after the print solved the issue.


You can use the app instance in development mode, because the logging level is set to DEBUG, ie.:

app.logger.info('This is info output')

In production mode you need to use a more severe level or you can set the logging level to DEBUG, ie.:

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()

This article talks about logging into flask: https://www.scalyr.com/blog/getting-started-quickly-with-flask-logging/