2010-01-28 20 views
65

निष्पादित करते समय मैं एक समारोह के साथ एक अजगर मॉड्यूल है:समारोह

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() में टिप्पणी के संदर्भ में अपने अगले शीघ्र मिल सकता है?

+0

की संभावित डुप्लिकेट [अजगर में इंटरएक्टिव मोड में जाएं] (http://stackoverflow.com/questions/13432717/enter-interactive-mode-in-python) –

उत्तर

42

सम्मिलित करना

import pdb; pdb.set_trace() 

उस बिंदु पर अजगर डिबगर में प्रवेश करेंगे

यहाँ देखें: http://docs.python.org/library/pdb.html

+0

'pdb' महान है वेनिला पायथन; यदि आपके पास बाहरी पैकेज लाने के लिए कमरा है, तो 'ipdb' महान है - डीबगर के समान कार्यक्षमता, लेकिन आईपीथॉन 0 =351 के लिए ipython – khstacking

115

आप एक मानक इंटरैक्टिव शीघ्र (डिबगर के बजाय चाहते हैं, prestomation द्वारा दिखाए गए के रूप में), आप यह कर सकते हैं:

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

देखें: code module

आप IPython स्थापित किया है, और एक IPython बजाय शैल चाहते हैं, आप IPython के लिए ऐसा कर सकते हैं> = 0.11:

import IPython; IPython.embed() 

या पुराने संस्करणों के लिए:

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

के सिंटैक्स हाइलाइटिंग, टैब पूर्णता आदि के साथ, IPython में कोई और मॉड्यूल शैल नहीं है ... तो इसे "आयात IPython; IPython.embed()" का उपयोग करके शुरू करें। – evandrix

+0

क्या 'code.interact()', ला पीडीबी 'सी (ऑनटिन्यू) 'दर्ज करने के बाद जारी रखना संभव है? –

+3

'code.interact()' एक अवरुद्ध कॉल है। आपका प्रोग्राम रुक जाएगा और इसे समाप्त होने की प्रतीक्षा करेगा। यदि आप इंटरैक्टिव दुभाषिया से बाहर निकलते हैं, तो आपके प्रोग्राम को तुरंत बयान के साथ फिर से शुरू करना चाहिए। –

14

यदि आप चाहते हैं एक डिफ़ॉल्ट पायथन दुभाषिया, आप

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

यह स्थानीय और ग्लोबल्स दोनों तक पहुंच की अनुमति देगा।

यदि आप एक आईपीथन दुभाषिया में जाना चाहते हैं, तो IPShellEmbed समाधान पुराना है। वर्तमान में क्या काम करता है:

from IPython import embed 
embed() 
+4

धन्यवाद, 'code.interact (स्थानीय = dict (globals(), ** स्थानीय()))' ऐसा है 'कोड से काफी बेहतर है।इंटरैक्ट (स्थानीय = स्थानीय()) 'क्योंकि उत्तरार्द्ध आपको संकुल को फिर से आयात करता है – s2t2

+0

यह उत्तर मेरे लिए बेहतर काम करता है क्योंकि मैं अपने पायथन कोड को कॉल करने के लिए बैश स्क्रिप्ट का उपयोग कर रहा था। स्वीकृत उत्तर का उपयोग करके मैं अपने पायथन कोड से बातचीत नहीं कर सका। धन्यवाद! – jonathanking

संबंधित मुद्दे