启动烧瓶app隐藏控制台输出?

时间:2017-09-09 10:22:05

标签: python flask

为什么在此代码中

import flask
app = flask.Flask(__name__)
if __name__ == '__main__':
    print ("Hello!")   # this gets printed to the console
    x = input("Please type something: ") # this gets shown in the console
    print ("something never to be seen") # this does not get printed
    print (x) # neither
    app.run(port=5001)    

输入语句后打印的部分永远不会出现在控制台中?

这就是我的控制台的样子:

$python flask2.py
Hello!
Please type something: asdf
 * Running on http://127.0.0.1:5001/ (Press CTRL+C to quit)

看起来好像开始烧瓶服务器以某种方式“隐藏”印刷品的一部分?

2 个答案:

答案 0 :(得分:1)

标准输出是缓冲,这意味着除非您调用sys.stdout.flush()

,否则不一定显示print()语句输出

答案 1 :(得分:1)

我认为你可以通过使用烧瓶Logging模块来实现这一目标,并使用logger替换print

logging模块比print语句更灵活。你会发现你现在看到的输出(到stdout)也由logging模块控制。

以下是将[INFO]级别消息记录到文件和标准输出中的示例。如果你想“打印”你不希望在控制台中看到的东西,你可以使用logger.debug('debug level msgs won't display in [INFO] level logger.')

from logging.config import dictConfig

dictConfig({
    'version': 1,
    'formatters': {
        'file_fmt': {
            'format': '[%(asctime)s] - %(levelname)s in %(module)s: %(message)s',
        },
        'console_fmt': {
            'format': '[%(asctime)s] - %(levelname)s - %(message)s',
        },
    },
    'handlers': {
        'file': {
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': 'error.log',
            'formatter': 'file_fmt',
            'level': 'INFO',
        },
        'console': {
            'class': 'logging.StreamHandler',
            'formatter': 'console_fmt',
            'stream': 'ext://sys.stdout',
            'level': 'INFO',
        },
    },
    'root': {
        'level': 'INFO',
        'handlers': ['file', 'console']
    }
})

如果您想在控制台中看到[DEBUG]消息,只需将['handlers']['config']['level']更改为'DEBUG'