কীভাবে ফ্ল্যাস্ক @ অ্যাপ্লিকেশন থেকে মুদ্রণ করবেন অজগর কনসোলে app


90

ব্যবহারকারী দ্বারা / বোতাম কল করার পরে আমি কেবল পাইথন কনসোলে একটি "হ্যালো ওয়ার্ল্ড" মুদ্রণ করতে চাই।

এটি আমার নিষ্পাপ দৃষ্টিভঙ্গি:

@app.route('/button/')
def button_clicked():
    print 'Hello world!'
    return redirect('/')

পটভূমি: আমি ফ্ল্যাশ থেকে অন্যান্য পাইথন কমান্ড প্রয়োগ করতে চাই (শেল নয়)। "মুদ্রণ" সবচেয়ে সহজ ক্ষেত্রে হওয়া উচিত। আমি বিশ্বাস করি আমি এখানে একটি বেসিক টুইস্ট বুঝতে পারি নি। আগাম ধন্যবাদ!


4
আপনি এখানে দুটি জিনিস গুলিয়ে ফেলছেন। আপনি হ্যান্ডলারের কাছ থেকে পছন্দ মতো যে কোনও ফাংশন কল করতে পারেন; তবে মুদ্রণ সহ সমস্যাটি হ'ল ফ্লাস্ক স্টাডাউটকে কী করছে।
ড্যানিয়েল রোজম্যান

হাই @ ড্যানিয়েলরোজম্যান এবং মন্তব্যের জন্য ধন্যবাদ! তাই ফ্লাস্ক কিছুটা প্রিন্টে এইচ-পি-র তে রাউটিং করছে? এড়াতে আমার কী করা উচিত? দুঃখিত যদি প্রশ্নটি মূর্খ হয় :)
রবার্ট ফিল্টার

4
কোন নির্বোধ প্রশ্ন নেই :)
Ciaran Liedeman

ফ্লাস্ক printসাড়া জাগাতে পারে না । আপনি যদি কোনও টার্মিনাল সেশন থেকে বিকাশ সার্ভার চালাচ্ছেন তবে আপনি সেখানে আউটপুট দেখতে পাবেন। আপনি যদি এটি ডাব্লুএসজিআই সার্ভার যেমন ইউডাব্লুএসজিআইয়ের মাধ্যমে চালাচ্ছেন তবে এর পরিবর্তে লগগুলিতে আউটপুট উপস্থিত হবে।
dirn

আপনি ফ্লাস্ক শুরু কিভাবে?
Ciaran Liedeman

উত্তর:


117

দেখে মনে হচ্ছে আপনার এটি কার্যকর হয়েছে, তবে অন্যদের জন্য এই উত্তরটি সন্ধান করছেন, স্টাডারকে মুদ্রণ করে এটি করার সহজ উপায়। আপনি এটির মতো এটি করতে পারেন:

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

ফ্লাস্ক কনসোলে স্টাডারে মুদ্রিত জিনিসগুলি প্রদর্শন করবে। স্ট্যাডারে মুদ্রণের অন্যান্য উপায়ের জন্য দেখুন এই স্ট্যাকওভারফ্লো পোস্টটি দেখুন


থেক্স @ গ্যাবে, এটি যাওয়ার উপায় বলে মনে হচ্ছে।
রবার্ট ফিল্টার

আমার কি সমস্ত ফাইলের ওপরে গিয়ে প্রতিটি মুদ্রণের জন্য যুক্ত from __future__ import print_functionকরতে হবে file=sys.stderr? এটির একটি সংক্ষিপ্ত পথ আছে?
e271p314

আমি মূল উত্তরে আমি যে পোস্টটি লিঙ্ক করেছি তার দিকে একবার নজর দেওয়ার পরামর্শ দেব। সেখানে একজন ব্যক্তি এমন একটি ফাংশন সংজ্ঞায়িত করার পরামর্শ দেন যা সর্বদা স্ট্যাডারকে মুদ্রণ করে (আপনি এটি ইতিমধ্যে আমদানি করে এমন কোনও ব্যবহারকারীর ফাইলটিতে রাখতে পারেন)। অন্য একজন ব্যক্তি sys.stderr.writ এর সুপারিশ করেন।
গাবে

এছাড়াও আপনি সঙ্গে পুনরাবৃত্তি একটি সামান্য বিট সংরক্ষণ করতে পারিনি: from sys import stderr, file=stderr। পাইথন 3+ তে আপনার প্রয়োজন হবে না from __future__ import print_functionএটি ডিফল্ট কার্যকারিতা।
ফিনিক্স

যদি কোনও বস্তুকে ডাম্প করা হয় তবে এটি কাজ করে বলে মনে হচ্ছেpprint(vars(myobject), sys.stderr)
jcroll

25

আমরা কনসোলে ডেটা মুদ্রণের জন্য লগিং ব্যবহার করতে পারি।

উদাহরণ:

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)

4
আপনি যদি কাজ করতে তথ্য লগারটি
gunslingor

8

আমার মনে হয় ফ্লাস্কের মূল সমস্যাটি হ'ল স্টাডআউট বাফার হয়ে যায়। আমি মুদ্রণ করতে সক্ষম ছিল print('Hi', flush=True)। আপনি PYTHONUNBUFFEREDপরিবেশ পরিবর্তনশীল (যে কোনও ফাঁকা স্ট্রিংতে) সেট করে বাফারিং অক্ষম করতে পারেন ।


এটি মুদ্রণ-ডিবাগিংয়ের জন্য সেরা উপায়, বিশেষত ছোট প্রকল্পগুলিতে
লার্নার0000

PYTHONUNBUFFERED env ভেরিয়েবলের মধ্যে কী মান নির্ধারণ করা উচিত?
Thanos.a

4
@ thanos.a আপনি এটিকে যেকোন ফাঁকা স্ট্রিংয়ে সেট করতে পারেন। আমি উত্তর আপডেট।
ক্রিস

আপনি PYTHONUNBUFFERED = "
কিছু_ও

0

আমি @ বিরাজ ওয়াদেটের কোডটি চালানোর চেষ্টা করেছি, তবে app.logger.infoকনসোল থেকে আউটপুটটি পেলাম না ।

কনসোলে বার্তা এবং বার্তা পেতে INFO, অবজেক্টটি সমস্ত লগের ( উত্স ) জন্য লগিং কনফিগারেশন তৈরি করতে ব্যবহার করা যেতে পারে :WARNINGERRORdictConfig

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)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.