ফ্লাস্ক অ্যাপটি কীভাবে ডিবাগ করবেন


134

ফ্লাস্কে ত্রুটিগুলি ডিবাগ করার অর্থ কীভাবে? কনসোলে প্রিন্ট করবেন? পৃষ্ঠায় বার্তা ফ্ল্যাশ? বা কিছু ভুল হয়ে গেলে কী ঘটছে তা নির্ধারণের জন্য আরও শক্তিশালী বিকল্প রয়েছে?


5
মায়াবী কিছুই নেই app.run()(হয় ডিবাগ চালু বা বন্ধ সঙ্গে)। ফ্লাস্ক অন্য যে কোনও পাইথন অ্যাপ্লিকেশনটির মতো আচরণ করে, তাই আপনি যে কোনও পাইথন অ্যাপ্লিকেশনটি ডিবাগ করুন ঠিক সেভাবেই আপনি এটি ডিবাগ করতে পারেন। আপনি যদি লগিং ব্যবহার করতে চান তবে লগিং ব্যবহার করুন। প্রিন্ট করতে চাইলে প্রিন্ট ব্যবহার করুন। আপনি চাইলে একটি ডিবাগারও ব্যবহার করতে পারেন।
মার্ক হিলড্রেথ

উত্তর:


128

অ্যাপ্লিকেশনটিকে ডেভলপমেন্ট মোডে চালানো কোনও ত্রুটি হলে ব্রাউজারে একটি ইন্টারেক্টিভ ট্রেসব্যাক এবং কনসোল দেখায়। বিকাশ মোডে চলতে, FLASK_ENV=developmentপরিবেশ পরিবর্তনশীল নির্ধারণ করুন তারপরে flask runকমান্ডটি ব্যবহার করুন (নির্দেশ করতে ভুলবেন না)FLASK_APP পাশাপাশি আপনার অ্যাপ্লিকেশনটিতেও করতে ভুলবেন না)।

লিনাক্স, ম্যাক, উইন্ডোজের জন্য লিনাক্স সাবসিস্টেম, উইন্ডোজে গিট ব্যাশ ইত্যাদি .:

export FLASK_APP=myapp
export FLASK_ENV=development
flask run

উইন্ডোজ সিএমডির জন্য, setরফতানির পরিবর্তে ব্যবহার করুন:

set FLASK_ENV=development

পাওয়ারশেলের জন্য, ব্যবহার করুন $env:

$env:FLASK_ENV = "development"

ফ্লাস্ক ০.০ এর পূর্বে FLASK_DEBUG=1পরিবেশ পরিবর্তনের দ্বারা এটি নিয়ন্ত্রণ করা হত।

আপনি যদি কমান্ডের app.run()পরিবর্তে পদ্ধতিটি ব্যবহার করেন তবে ডিবাগ মোড সক্ষম করতে flask runপাস debug=Trueকরুন।

ট্রেসব্যাকগুলি ডেভেলপমেন্ট মোড নির্বিশেষে সার্ভার চলমান টার্মিনালেও মুদ্রিত হয়।

আপনি যদি পাইচার্ম, ভিএস কোড ইত্যাদি ব্যবহার করে থাকেন তবে ব্রেকআপপয়েন্ট সহ কোডটি সরাতে আপনি এটির ডিবাগারের সুবিধা নিতে পারেন। রান কনফিগারেশন একটি স্ক্রিপ্ট কলিং app.run(debug=True, use_reloader=False)বা এটি এ নির্দেশ করতে পারেvenv/bin/flask স্ক্রিপ্টে করতে পারে এবং কমান্ড লাইন থেকে আপনি যেমন ব্যবহার করেন তেমন ব্যবহার করতে পারেন। আপনি পুনরায় লোডারটিকে অক্ষম রাখতে পারেন, তবে একটি পুনরায় লোড ডিবাগিং প্রসঙ্গে মেরে ফেলবে এবং আপনাকে আবার একটি ব্রেকপয়েন্ট ধরতে হবে।

আপনি set_traceযেখানে ডিবাগিং শুরু করতে চান সেই দৃশ্যে কল করে আপনি পিডিবি, পুডব বা অন্য কোনও টার্মিনাল ডিবাগারও ব্যবহার করতে পারেন।


ব্লকগুলি বাদে খুব বেশি ব্রড ব্যবহার না করার বিষয়ে নিশ্চিত হন। ক্যাপ-অল দিয়ে আপনার সমস্ত কোডকে ঘিরে আপনার try... except...ত্রুটিটি ডিবাগ করতে চাইবে silence এটি সাধারণভাবে অপ্রয়োজনীয়, যেহেতু ফ্লাস্ক ইতিমধ্যে ডিবাগার বা একটি 500 ত্রুটি দেখিয়ে এবং কনসোলটিতে ট্রেসব্যাক মুদ্রণ করে ব্যতিক্রমগুলি পরিচালনা করবে।


38

আপনি নীচে উল্লিখিত হিসাবে ওয়ার্কজেগ ডিবাগার সম্পাদনারapp.run(debug=True) জন্য ব্যবহার করতে পারেন , এবং আমার জানা উচিত ছিল।


7
আসলে, আপনি যখন আপনার সাথে debug=Trueদৌড়াবেন আসলে ওয়ার্কজেগ ডিবাগারটি ব্যবহার করছেন যাতে এটি কোনও হয় না বা ;-) নয়
শান ভিয়েরা

হা, আপনি ঠিক বলেছেন। আমি অনুমান করি প্রয়োজনীয়তার জন্য আমার ফ্লাস্কের সেটআপ.পি এর দিকে নজর দেওয়া উচিত ছিল। GAE এর অধীনে কাজ করার জন্য আমি এর একটি পরিবর্তিত অনুলিপি ব্যবহার করি যেখানে আপনাকে ম্যানুয়ালি ওয়ার্কজিগ শুরু করতে হবে।
বিন্নুকাস

আমি অ্যাপ.আরুন (ডিবাগ = সত্য) সেট করে রেখেছি, আমি যদি জাইজ প্রিন্ট করি তবে এটি কোথায় প্রিন্ট করে, ধন্যবাদ
কিমি

ব্যবহার print 'xyz'করে কনসোলে মুদ্রণ করা হবে। আপনি যদি ব্রাউজারে ডিবাগ করতে চান তবে আপনি যেখানে ডিবাগ করতে চাইছেন সেখানে আপনাকে একটি ত্রুটি জোর করতে হবে। raise Exception('xyz')। এটি ব্রাউজার উইন্ডোতে আউটপুট থেকে ডিবাগকে ট্রিগার করবে।
বিনলুকাস

25

1.1.xডকুমেন্টেশন থেকে , আপনি আপনার শেল প্রম্পটে পরিবেশ পরিবর্তনশীল রফতানি করে ডিবাগ মোড সক্ষম করতে পারেন:

export FLASK_APP=/daemon/api/views.py  # path to app
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0

4
এই উত্তরটি আরও সহায়ক হবে যদি এটি ব্যাখ্যা করে যে ডিবাগ মোড আসলে কী। এটি ব্রাউজারে ডিবাগিংয়ের অনুমতি দেওয়ার চেয়ে আরও বেশি কিছু করে? দুর্ভাগ্যক্রমে, যেহেতু আমি একটি REST এপিআইতে কাজ করছি, এটি সত্যিই আমাকে খুব বেশি সহায়তা করে না।
মাইকেল শ্যাপার 19

আমি কোথায় এই স্নিপেট রাখি?
mLstudent33

1
@ এমএলস্টুডেন্ট 33 একটি শেল
লোপেজ

15

রেন্ডার পৃষ্ঠাগুলিতে এম্বেড করা আরও বিস্তারিত তথ্য পেতে একজন ফ্লাস্ক ডিবাগ সরঞ্জামদণ্ড এক্সটেনশনও ব্যবহার করতে পারেন।

from flask import Flask
from flask_debugtoolbar import DebugToolbarExtension
import logging

app = Flask(__name__)
app.debug = True
app.secret_key = 'development key'

toolbar = DebugToolbarExtension(app)

@app.route('/')
def index():
    logging.warning("See this message in Flask Debug Toolbar!")
    return "<html><body></body></html>"

অ্যাপ্লিকেশনটি নিম্নরূপ শুরু করুন:

FLASK_APP=main.py FLASK_DEBUG=1 flask run

12

আপনি যদি ভিজ্যুয়াল স্টুডিও কোড ব্যবহার করছেন তবে প্রতিস্থাপন করুন

app.run(debug=True)

সঙ্গে

app.run()

অভ্যন্তরীণ ডিবাগারটি চালু করার সময় এটি ভিএস কোড ডিবাগারটিকে অক্ষম করে It


3
আপনি কি একটি কাজের সেটআপের উদাহরণ ভাগ করতে পারেন? আমি আমার এনভিতে ইতিমধ্যে FLASK_APP সংজ্ঞায়িত করেছি এবং ডিফল্ট কনফিগারেশনটি কাজ করবে না। আমি এটি চেষ্টা করেছিলাম - পেস্টবিন.com / v8hBQ2vv এবং অনেকগুলি অনুরূপ ক্রিয়াকলাপ, কিন্তু কোনও ফলসই হয়নি।
ব্র্যান্ডন ডাব

12

আপনি যদি আপনার ফ্লাস্ক অ্যাপটি ডিবাগ করতে চান তবে কেবল ফোল্ডার অ্যাপ্লিকেশন যেখানে রয়েছে সেই ফোল্ডারে যান। আপনার ভার্চুয়াল পরিবেশটি সক্রিয় করতে এবং কনসোলের লাইনগুলিকে "মেইনফিলনাম" ফ্ল্যাশ মূল ফাইলটিতে পেস্ট করতে ভুলবেন না।

export FLASK_APP="mainfilename.py"
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0

আপনি ফ্লাশ অ্যাপের জন্য আপনার ডিবাগার সক্ষম করার পরে প্রায় প্রতিটি ত্রুটি কনসোলে বা ব্রাউজার উইন্ডোতে মুদ্রিত হবে। কী হচ্ছে তা যদি আপনি জানতে চান তবে আপনি সাধারণ মুদ্রণ বিবৃতি ব্যবহার করতে পারেন বা জাভাস্ক্রিপ্ট কোডের জন্য কনসোল.লগ () ব্যবহার করতে পারেন।


5

python-dotenvআপনার ভার্চুয়াল পরিবেশে ইনস্টল করুন ।

আপনার প্রকল্পের মূলটিতে একটি .ফ্লাসকেনভ তৈরি করুন। প্রকল্পের মূল দ্বারা, আমি ফোল্ডারটি বলতে চাইছি যেখানে আপনার app.py ফাইল রয়েছে

এই ফাইলটির অভ্যন্তরে নিম্নলিখিতটি লিখুন:

FLASK_APP=myapp 
FLASK_ENV=development

এখন নিম্নলিখিত কমান্ড জারি করুন:

flask run

আমার সাথে কাজ করছে না ... এটি ডিবাগ মোডটি দেখায়: বন্ধ
ফেডেরিকো জেন্টিলে

3

ফ্লাস্কে ডিবাগ মোডটি সক্রিয় করতে আপনি কেবল নিজের উইন্ডোজের জন্য সেট টাইপ FLASK_DEBUG=1করুন CMDএবং FLASK_DEBUG=1লিনাক্স টার্মিয়াল এ রফতানি করুন আপনার অ্যাপ্লিকেশন পুনরায় চালু করুন এবং আপনি যেতে ভাল !!


2

দ্রুত টিপ - যদি আপনি পাইচার্ম ব্যবহার করেন তবে Edit Configurations=> এ যান Configurationsএবং FLASK_DEBUGচেকবক্স সক্ষম করুন, পুনরায় চালু করুন Run


2
আপনি যুক্ত করতে চাইবেন যে এই চেকবাক্সটি কেবল পাইচার্ম প্রফেশনাল এ উপলব্ধ। তথ্যসূত্র: jetbrains.com/help/pycharm/…
সাইরোক্সিক্স

1

বিকাশ পরিবেশে লগার এবং মুদ্রণ বিবরণী ব্যবহার করুন, আপনি উত্পাদন পরিবেশের ক্ষেত্রে প্রেরণের জন্য যেতে পারেন।


1

উইন্ডোজ ব্যবহারকারীদের জন্য:

আপনার প্রকল্প ডিরেক্টরিতে পাওয়ারশেল এবং সিডি খুলুন।

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

$env:FLASK_APP = "app"  
$env:FLASK_ENV = "development"

-1

আপনি যদি এটি স্থানীয়ভাবে চালাচ্ছেন এবং কোডের মাধ্যমে পদক্ষেপে সক্ষম হতে চান:

python -m pdb script.py


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