फ्लास्क @ app.route से python कंसोल पर कैसे प्रिंट करें


88

मैं बस उपयोगकर्ता द्वारा कॉल किए जाने के बाद अजगर बटन को "हैलो वर्ल्ड" प्रिंट करना चाहूंगा।

यह मेरा भोला तरीका है:

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

पृष्ठभूमि: मैं फ्लास्क (शेल नहीं) से अन्य अजगर आदेशों को निष्पादित करना चाहूंगा। "प्रिंट" सबसे आसान मामला होना चाहिए। मेरा मानना ​​है कि मैंने यहां एक बुनियादी मोड़ को नहीं समझा है। अग्रिम में धन्यवाद!


1
आप यहां दो चीजों को भ्रमित कर रहे हैं। आप किसी भी फ़ंक्शन को हैंडलर से कॉल कर सकते हैं; लेकिन प्रिंट के साथ मुद्दा यह है कि फ्लास्क स्टडआउट कर रहे हैं।
डैनियल रोसमैन

हाय @DanielRoseman और टिप्पणी के लिए धन्यवाद! तो फ्लास्क कुछ हद तक प्रिंट को http से रूट कर रहा है? इसे रोकने के लिए मुझे क्या करना चाहिए? क्षमा करें यदि प्रश्न मूर्खतापूर्ण है :)
रॉबर्ट फ़िल्टर

1
कोई मूर्खतापूर्ण सवाल नहीं हैं :)
सियारन लीडमैन

फ्लास्क printप्रतिक्रिया के लिए मार्ग नहीं करता है । यदि आप टर्मिनल सत्र से विकास सर्वर चला रहे हैं, तो आप वहां आउटपुट देखेंगे। यदि आप इसे WSGI सर्वर जैसे uWSGI के माध्यम से चला रहे हैं, तो आउटपुट इसके बजाय लॉग में दिखाई देगा।
दिशानि

आप फ्लास्क कैसे शुरू कर रहे हैं?
सियारन लीडमैन

जवाबों:


116

ऐसा लगता है कि आपने इसे काम कर लिया है, लेकिन इस उत्तर की तलाश करने वाले अन्य लोगों के लिए, ऐसा करने का एक आसान तरीका है कि आप स्टादर पर प्रिंट कर सकते हैं। आप ऐसा कर सकते हैं:

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

फ्लास्क सांत्वना में stderr के लिए मुद्रित चीजों को प्रदर्शित करेगा। Stderr पर मुद्रण के अन्य तरीकों के लिए, इस स्टैकओवरफ़्लो पोस्ट को देखें


Thx @Gabe, यह जाने का एक तरीका प्रतीत होता है।
रॉबर्ट फ़िल्टर

मैं वास्तव में सभी फाइलों को खत्म हो जाने के लिए और जोड़ने की जरूरत है from __future__ import print_functionभी file=sys.stderrहर प्रिंट के लिए? क्या इसका कोई छोटा रास्ता है?
e271p314

मैं मूल उत्तर में लिंक की गई पोस्ट पर एक नज़र डालने की सलाह दूंगा। एक व्यक्ति एक फ़ंक्शन को परिभाषित करने की सिफारिश करता है जो हमेशा स्टैडर को प्रिंट करता है (आप इसे एक उपयोग फ़ाइल में डाल सकते हैं जिसे आप पहले से आयात करते हैं)। एक अन्य व्यक्ति sys.stderr.write की सिफारिश करता है।
गाबे

तुम भी साथ पुनरावृत्ति का एक छोटा सा बचा सकता है: 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)

इस देखें कि आप काम करने के लिए जानकारी लकड़हारा नहीं मिल सकता है: flask.palletsprojects.com/en/1.0.x/logging
gunslingor

8

मुझे लगता है कि फ्लास्क के साथ मुख्य मुद्दा यह है कि स्टडआउट बफर हो जाता है। मैं के साथ मुद्रित करने में सक्षम था print('Hi', flush=True)। आप PYTHONUNBUFFEREDपर्यावरण चर (किसी भी गैर-रिक्त स्ट्रिंग में) सेट करके बफरिंग को अक्षम कर सकते हैं ।


प्रिंट-डिबगिंग के लिए यह सबसे अच्छा तरीका है, विशेष रूप से छोटी परियोजनाओं में
learner0000

वह मान क्या है जिसे PYTHONUNBUFFERED env वैरिएबल में सेट किया जाना चाहिए?
thanos.a

1
@ thanos.a आप इसे किसी भी गैर-रिक्त स्ट्रिंग पर सेट कर सकते हैं। मैंने जवाब अपडेट किया।
क्रिस

आप PYTHONUNBUFFERED = "something_here" जैसे उदाहरण जोड़ सकते हैं
thanos.a
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.