2011-10-06 10 views
21

से इंटरैक्टिव पायथन खोल चलाएं, अक्सर मुझे यह मामला है कि मैं एक स्क्रिप्ट लिखूंगा, और मैं उस स्क्रिप्ट के एक हिस्से तक हूं जहां मैं कुछ चर के साथ इंटरैक्टिव रूप से खेलना चाहता हूं। उस भाग को प्राप्त करने के लिए मैंने पहले से लिखी गई स्क्रिप्ट का एक बड़ा हिस्सा चलाने की आवश्यकता है।पायथन: प्रोग्राम

इस मामले में इस कार्यक्रम को खोल के अंदर से चलाने के लिए तुच्छ नहीं है। मुझे किसी भी तरह की फ़ंक्शन की शर्तों को फिर से बनाना होगा।

मैं क्या करना चाहता हूं, runshell() जैसे फ़ंक्शन को कॉल करें, जो कार्यक्रम में उस बिंदु पर अजगर खोल चलाएगा, सभी चर को दायरे में रखकर, मुझे इसमें चारों ओर पोक करने की इजाजत देता है।

मैं ऐसा करने के बारे में कैसे जाऊं?

import pdb 

pdb.set_trace() 
+0

क्या आप पाइथन डीबगर का उपयोग करने के बारे में बात कर रहे हैं? या आप एक बड़ी लिपि को अधिक प्रबंधनीय टुकड़ों में विघटित करने के तरीके पर डिज़ाइन सलाह की तलाश में हैं? –

+0

मैं पूर्व के बारे में पूछ रहा हूं - मैं उस शब्द को भूल गया था ('डीबगर')! – Claudiu

+0

संभावित डुप्लिकेट [एक पाइथन इंटरएक्टिव सत्र मध्य-कार्यक्रम में कूदें?] (Http://stackoverflow.com/questions/925832/jump-into-a-python-interactive-session-mid-program) –

उत्तर

37
import code 

code.interact(local=locals()) 

लेकिन अजगर डिबगर का उपयोग कर शायद और अधिक तुम क्या चाहते है।

उदाहरण के लिए

, अगर आप इस तरह एक स्क्रिप्ट आह्वान:

def whatever(): 
    x = 3 
    import pdb 
    pdb.set_trace() 

if __name__ == '__main__': 
    whatever() 

आप जब set_trace कहा जाता है बिंदु पर गुंजाइश मिलती है:

$ python ~/test/test.py 
--Return-- 
> /home/jterrace/test/test.py(52)whatever()->None 
-> pdb.set_trace() 
(Pdb) x 
3 
(Pdb) 
+0

धन्यवाद! मैं थोड़ी देर के लिए यह देख रहा हूँ! आयात कोड – zx1986

+0

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

5

आप अजगर डिबगर (pdb) set_trace फ़ंक्शन का उपयोग कर सकते हैं:

0

नहीं वास्तव में एक आदर्श स्रोत लेकिन मैंने कुछ मैनहोल पहले लिखा है, यहां एक है जिसे मैंने एक छोड़े गए पालतू परियोजना के लिए लिखा है http://code.google.com/p/devdave/source/browse/pymethius/trunk/webmud/handlers/konsole.py

और यहां ट्विस्ट लाइब्रेरी http://twistedmatrix.com/trac/browser/tags/releases/twisted-8.1.0/twisted/manhole/telnet.py सह है nsole तर्क Shell.doCommand

4

में है व्यावहारिकता के लिए मैं जोड़ने के लिए एक एक लाइनर में है कि आप डिबगर का पता लगाने रख सकते हैं करना चाहते हैं:

import pdb; pdb.set_trace() 

कौन सा एक संपादक है कि समर्थन करता है में जोड़ने के लिए एक अच्छा रेखा है स्निपेट्स, जैसे टेक्स्टमैट या विम + स्निपमैट। मैंने इसे उपरोक्त एक लाइनर में "ब्रेक" का विस्तार करने के लिए स्थापित किया है।

+0

हाँ यह वास्तव में है कि मैं आजकल क्या कर रहा हूं – Claudiu

12

अभी तक सबसे सुविधाजनक तरीका है कि मैं पाया है है:

import IPython 
IPython.embed() 

आप अपने सभी वैश्विक और स्थानीय चर और IPython के सभी प्राणी आराम मिलता है: टैब पूरा होने, ऑटो खिसकने, आदि

आपको इसे निश्चित रूप से उपयोग करने के लिए आईपीथन मॉड्यूल स्थापित करना होगा:

pip install ipython 
+0

मुझे इसे एक चेतावनी से प्यार है। मुझे अपने आयात को फिर से करना है। नए इंटरैक्टिव शैल के आयात के माध्यम से भी पारित करने का कोई तरीका? – kdauria

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