ফাংশন সম্পাদন করার সময় পাইথন ইন্টারপ্রেটারে ফেলে দিন


90

আমার একটি ফাংশন সহ অজগর মডিউল রয়েছে:

def do_stuff(param1 = 'a'):
    if type(param1) == int:
        # enter python interpreter here
        do_something()
    else:
        do_something_else()

কমান্ড লাইন ইন্টারপ্রেটারে নামার কোনও উপায় আছে যেখানে আমার মন্তব্য আছে? যাতে আমি অজগরটিতে নিম্নলিখিতগুলি চালিত করি:

>>> import my_module
>>> do_stuff(1)

আমি আমার পরবর্তী প্রম্পটটি পেয়েছি যেখানে আমার মন্তব্য আছে সেখানে তার সুযোগ এবং প্রসঙ্গে do_stuff()?


উত্তর:


61

.োকানো হচ্ছে

import pdb; pdb.set_trace()

সেই সময়ে পাইথন ডিবাগারে প্রবেশ করবে

এখানে দেখুন: http://docs.python.org/library/pdb.html


pdbদুর্দান্ত ভ্যানিলা অজগর; আপনার যদি কোনও বাহ্যিক প্যাকেজ আনার জায়গা থাকে ipdbতবে দুর্দান্ত - ডিবাগারের মতো একই কার্যকারিতা, তবে আইপথনের সিনট্যাক্স হাইলাইট, ট্যাব সমাপ্তি ইত্যাদির সাথে
khstacking

আপডেট - ipdbঅবচিত করা হয়েছিল, আজকাল আমি ব্যবহার করি pdbpp( pdb++) , যা একই বৈশিষ্ট্য রয়েছে এবং import pdb; pdb.set_trace()এটি নিয়ে কাজ করে (যেমন এটি আমদানি করে, তাই এটি একটি ড্রপ-ইন প্রতিস্থাপন)
ড্রিফ্যাচ্যাচার

@ হাংটউইন্টি: আপনি কেন বলেন যে হতাশ ipdbহয়েছে? আমি এর কোনও খবর পাই না।
নিক মাত্তিও

@ কুন্ডোর হু, আপনি ঠিক বলেছেন আমি স্পষ্টভাবে কোথাও পড়াটি মনে রাখতে পারি যে লেখকরা প্রকল্পটি রক্ষণাবেক্ষণ বন্ধ করার সিদ্ধান্ত নিয়েছিলেন এবং পরিবর্তে অন্য প্রকল্পের দিকে ইঙ্গিত করেছিলেন। সম্ভবত কিছুটা ঘটেছে এবং তারপরে কি তা পুনরুত্থিত হয়েছিল? আমার ভুল হতে পারে! উভয় ক্ষেত্রেই, আমি এর ipdbআগে উপভোগ করেছি , তবে pdbpp
সেখান

144

আপনি যদি কোনও মানক ইন্টারেক্টিভ প্রম্পট চান (প্রিস্টোমেশন দ্বারা প্রদর্শিত ডিবাগারের পরিবর্তে), আপনি এটি করতে পারেন:

import code
code.interact(local=locals())

দেখুন: কোড মডিউল

যদি আপনি আইপিথন ইনস্টল করে থাকেন এবং তার পরিবর্তে আইপিথন শেল চান, আপনি আইপিথন> = 0.11 এর জন্য এটি করতে পারেন:

import IPython; IPython.embed()

বা পুরানো সংস্করণগুলির জন্য:

from IPython.Shell import IPShellEmbed
ipshell = IPShellEmbed()
ipshell(local_ns=locals())

27
আইপিথন> = ০.১১ এর জন্য আইপিথনে আর কোনও মডিউল শেল নেই ... সুতরাং এর পরিবর্তে "আইপিথন আমদানি করুন; আইপিথন.ইম্বেড ()" ব্যবহার করে এটি শুরু করুন।
ইভানড্রিক্স

code.interact()একটি লা পিডিবি প্রবেশের পরে কি চালিয়ে যাওয়া সম্ভব c(ontinue)?
নিক টি

4
code.interact()একটি ব্লকিং কল। আপনার প্রোগ্রামটি থামবে এবং এটি শেষ হওয়ার জন্য অপেক্ষা করবে। আপনি যদি ইন্টারেক্টিভ দোভাষী থেকে প্রস্থান করেন, আপনার প্রোগ্রামটি অবিলম্বে নিম্নলিখিত বিবৃতি দিয়ে পুনরায় শুরু করা উচিত।
ম্যাট অ্যান্ডারসন

4
একটি ইন্টারেক্টিভ প্রম্পট এবং একটি ডিবাগার মধ্যে পার্থক্য কি?
স্টকবি

4
@ স্টকবি এটি স্ট্যান্ডার্ড ইন্টারেক্টিভ প্রম্পট যা এটি গুরুত্বপূর্ণ করে তোলে। ডিবাগারটি একটি ইন্টারেক্টিভ প্রম্পট, তবে এটি একই নয়। help
পিডিবিতে

29

আপনি যদি কোনও ডিফল্ট পাইথন ইন্টারপ্রেটার চান, আপনি এটি করতে পারেন

import code
code.interact(local=dict(globals(), **locals()))

এটি স্থানীয় এবং গ্লোবাল উভয়ই অ্যাক্সেসের অনুমতি দেবে।

আপনি যদি একটি আইপথন ইন্টারপ্রেটার রেখে যেতে চান তবে IPShellEmbedসমাধানটি পুরানো । বর্তমানে কি কাজ করে:

from IPython import embed
embed()

8
ধন্যবাদ, এর code.interact(local=dict(globals(), **locals()))চেয়ে অনেক ভাল code.interact(local=locals())কারণ পরেরটি আপনাকে প্যাকেজগুলি পুনরায় আমদানি করে তোলে
s2t2

এই উত্তরটি আমার পক্ষে আরও ভাল কাজ করেছে যেহেতু আমি আমার অজগর কোডটি কল করতে ব্যাশ স্ক্রিপ্ট ব্যবহার করছিলাম। আমি স্বীকৃত উত্তরটি ব্যবহার করে আমার অজগর কোডটির সাথে ইন্টারঅ্যাক্ট করতে পারিনি। ধন্যবাদ!
জোনাথঙ্কিং
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.