Python 启动flask应用程序隐藏控制台输出?

Python 启动flask应用程序隐藏控制台输出?,python,flask,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")

为什么在这个代码中

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)

似乎启动flask服务器以某种方式隐藏了部分打印内容?

标准输出被缓冲,这意味着打印语句输出不一定显示,除非调用sys.stdout.flush

标准输出被缓冲,这意味着打印语句输出不必显示,除非调用sys.stdout.flush

我认为可以通过使用flask模块并使用logger替换打印来实现

日志记录模块比打印语句更灵活。您会发现,您现在看到的stdout输出也是由日志模块控制的

下面是一个将[INFO]级别的消息记录到文件和标准输出的示例。若你们想打印你们不想在控制台中看到的东西,你们可以使用logger.debug“调试级别的msgs不会显示在[INFO]级别的logger中。”


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

我认为您可以通过使用flask模块和使用logger replace print来达到这一目的

日志记录模块比打印语句更灵活。您会发现,您现在看到的stdout输出也是由日志模块控制的

下面是一个将[INFO]级别的消息记录到文件和标准输出的示例。若你们想打印你们不想在控制台中看到的东西,你们可以使用logger.debug“调试级别的msgs不会显示在[INFO]级别的logger中。”


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

它会为我显示Python3.6/windows是否可能正在显示这些行,而不是在您期望的位置,例如屏幕下方?我问这个问题是因为print写入stdout,flask写入stderr——这两个常常会混淆,而不管您的代码位于何处。事实上,从CMD运行时不会出现问题,但在我的例子中,在使用Git Bash时会出现问题。现在已解决-缓冲问题。它向我显示Python3.6/windows是否可能正在显示这些行,而不是显示在您期望的位置,例如屏幕下方?我问这个问题是因为print写入stdout,flask写入stderr——这两个常常会混淆,而不管您的代码位于何处。事实上,从CMD运行时不会出现问题,但在我的例子中,在使用Git Bash时会出现问题。现在解决-缓冲问题。现场。请注意,在我的示例中,当从cmd运行python时,Windows上不会发生缓冲,但在使用Git Bash时会发生缓冲。是的,缓冲行为未指定,这意味着不带刷新的打印可能在一个操作系统上正常工作,而在同一操作系统的另一个或甚至另一个版本上也不会。请注意,在我的示例中,当从cmd运行python时,Windows上不会发生缓冲,但在使用Git Bash时会发生缓冲。是的,缓冲行为未指定,这意味着不带刷新的打印可能在一个操作系统上正常工作,而在另一个或甚至同一操作系统的另一个版本上也无法正常工作。
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']
    }
})