为什么在此代码中
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)
看起来好像开始烧瓶服务器以某种方式“隐藏”印刷品的一部分?
答案 0 :(得分:1)
标准输出是缓冲,这意味着除非您调用sys.stdout.flush()
答案 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'
。