Saya hanya ingin mencetak "hello world" ke konsol python setelah tombol / dipanggil oleh pengguna.
Ini adalah pendekatan naif saya:
@app.route('/button/')
def button_clicked():
print 'Hello world!'
return redirect('/')
Latar Belakang: Saya ingin menjalankan perintah python lain dari flask (bukan shell). "print" harus menjadi kasus termudah. Saya yakin saya belum memahami perubahan mendasar di sini. Terima kasih sebelumnya!
print
ke respon. Jika Anda menjalankan server pengembangan dari sesi terminal, Anda akan melihat hasilnya di sana. Jika Anda menjalankannya melalui server WSGI seperti uWSGI, hasilnya akan muncul di log.Jawaban:
Sepertinya Anda sudah berhasil, tetapi bagi orang lain yang mencari jawaban ini, cara mudah untuk melakukannya adalah dengan mencetak ke stderr. Anda bisa melakukannya seperti ini:
from __future__ import print_function # In python 2.7 import sys @app.route('/button/') def button_clicked(): print('Hello world!', file=sys.stderr) return redirect('/')
Flask akan menampilkan hal-hal yang dicetak ke stderr di konsol. Untuk cara lain mencetak ke stderr, lihat posting stackoverflow ini
sumber
from __future__ import print_function
jugafile=sys.stderr
untuk setiap cetakan? apakah ada jalan pintas untuk itu?from sys import stderr
,file=stderr
. Di Python 3+, Anda tidak perlufrom __future__ import print_function
, itu adalah fungsionalitas default.pprint(vars(myobject), sys.stderr)
Kami juga dapat menggunakan logging untuk mencetak data di konsol.
Contoh:
import logging from flask import Flask app = Flask(__name__) @app.route('/print') def printMsg(): app.logger.warning('testing warning log') app.logger.error('testing error log') app.logger.info('testing info log') return "Check your console" if __name__ == '__main__': app.run(debug=True)
sumber
Saya pikir masalah inti dengan Flask adalah stdout mendapat buffer. Saya bisa mencetak dengan
print('Hi', flush=True)
. Anda juga dapat menonaktifkan buffering dengan menyetelPYTHONUNBUFFERED
variabel lingkungan (ke string tidak kosong apa pun).sumber
Saya mencoba menjalankan kode @Viraj Wadate, tetapi tidak bisa mendapatkan hasilnya
app.logger.info
konsol.Untuk mendapatkan
INFO
,,WARNING
danERROR
pesan di konsol,dictConfig
objek dapat digunakan untuk membuat konfigurasi logging untuk semua log ( sumber ):from logging.config import dictConfig from flask import Flask dictConfig({ 'version': 1, 'formatters': {'default': { 'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s', }}, 'handlers': {'wsgi': { 'class': 'logging.StreamHandler', 'stream': 'ext://flask.logging.wsgi_errors_stream', 'formatter': 'default' }}, 'root': { 'level': 'INFO', 'handlers': ['wsgi'] } }) app = Flask(__name__) @app.route('/') def index(): return "Hello from Flask's test environment" @app.route('/print') def printMsg(): app.logger.warning('testing warning log') app.logger.error('testing error log') app.logger.info('testing info log') return "Check your console" if __name__ == '__main__': app.run(debug=True)
sumber