पायथन कोड से REPL (Read, Eval, Print, Loop) में कैसे छोड़ें


108

क्या प्रोग्राम को कमांड लाइन से स्क्रिप्ट लॉन्च करने पर भी, इसके निष्पादन में एक मनमाने ढंग से एक REPL में ड्रॉप करने के लिए पायथन स्क्रिप्ट को प्रोग्राम करने के लिए मजबूर करने का एक तरीका है?

मैं एक त्वरित और गंदे प्लॉटिंग प्रोग्राम लिख रहा हूं, जिसे मैं स्टडिन या फाइल से डेटा पढ़ना चाहता हूं, उसे प्लॉट करना चाहता हूं, और फिर प्लॉट को कस्टमाइज़ करने की अनुमति देने के लिए आरईपीएल में छोड़ दूंगा।

जवाबों:


104

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

python -i program.py

यह program.py में कोड निष्पादित करेगा, फिर REPL पर जाएँ। जो भी आप निर्धारित करते हैं या कार्यक्रम के शीर्ष स्तर में आयात करते हैं, वह उपलब्ध होगा।


21
जब आप अंधेरे पक्ष में जाने के लिए तैयार हों, तो आपके लिए ipython -i program.py है।
जोफोरकर

प्रभावशाली और सरल।
निशांत

126

मैं अक्सर इसका उपयोग करता हूं:

def interact():
    import code
    code.InteractiveConsole(locals=globals()).interact()

47
आप इसे उससे भी सरल कर सकते हैं: आयात कोड; code.interact (स्थानीय = स्थानीय) ()
स्टीवन क्रिस्कल्ला

3
भीतर pdb, तुम उपयोग कर सकते हो interact
gerrit

43

यहां बताया गया है कि आपको यह कैसे करना चाहिए (IPython> v0.11):

import IPython
IPython.embed()

आईपीथॉन के लिए <= v0.11:

from IPython.Shell import IPShellEmbed

ipshell = IPShellEmbed()

ipshell() # this call anywhere in your program will start IPython

आपको आइपीथॉन, पायथन आरईपीएल के कैडिलैक का उपयोग करना चाहिए। देख http://ipython.org/ipython-doc/stable/interactive/reference.html#embedding-ipython

प्रलेखन से:

यह वैज्ञानिक कंप्यूटिंग स्थितियों में भी उपयोगी हो सकता है जहां कुछ स्वचालित, कम्प्यूटेशनल रूप से गहन भाग करने की आवश्यकता होती है और फिर डेटा, भूखंडों आदि को देखना बंद कर देते हैं, एक IPython उदाहरण खोलना आपको अपने डेटा और कार्यों तक पूरी पहुंच प्रदान करेगा, और आप एक बार इंटरएक्टिव भाग के साथ किए जाने पर (शायद बाद में, जितनी बार जरूरत हो) रुकने के लिए प्रोग्राम का निष्पादन फिर से शुरू कर सकते हैं।


3
आईपीथॉन महान है, लेकिन अगर ओपी एक समाधान चाहता है जो केवल अंतर्निहित पायथन, जेसन के कोड का उपयोग करता है। InteractiveConsole () समाधान यह है कि आप इसे "कैसे" करें। :-)
बेन होयट

18

IPython का उपयोग करने और डीबगर की कार्यक्षमता के लिए आपको ipdb का उपयोग करना चाहिए ,

आप इसका उपयोग pdb की तरह ही कर सकते हैं, इसके अलावा:

import ipdb
ipdb.set_trace()

17

आप डिबगर लॉन्च कर सकते हैं:

import pdb;pdb.set_trace() 

सुनिश्चित नहीं है कि आप किस लिए REPL चाहते हैं, लेकिन डीबगर बहुत समान है।


3
मुझे संदेह होगा कि वह एक चल रही प्रक्रिया में एक लाइव बदलाव करना चाहते हैं।
पिनोकल

1
क्या स्क्रिप्ट को निष्पादित करने का कोई तरीका है जो आपने पीडीबी में लॉन्च किया है?
जेफ वेलिंग

1
मैं अजगर को बचाने के लिए VIM में कोड स्निपेट लिखना पसंद करता हूं और फिर उदाहरण के लिए पायथन -i% करता हूं। या पीडीबी। यह एक अच्छा उपयोग मामला है।
निशांत

0

मैंने अपनी एक स्क्रिप्ट में ऐसा किया था (यह एक ऑटोमेशन फ्रेमवर्क के अंदर चलता है जो कि एक बहुत बड़ा PITA टू इंस्ट्रूमेंट है):

x = 0 # exit loop counter
while x == 0:
    user_input = raw_input("Please enter a command, or press q to quit: ")
    if user_input[0] == "q":
        x = 1
    else:
        try:
            print eval(user_input)
        except:
            print "I can't do that, Dave."
            continue

जहां भी आप ब्रेकपॉइंट चाहते हैं, वहां इसे लगाएं, और आप अजगर के दुभाषिया के समान सिंटैक्स का उपयोग करके राज्य की जांच कर सकते हैं (हालांकि यह आपको मॉड्यूल आयात करने की अनुमति नहीं देता है)। यह बहुत सुरुचिपूर्ण नहीं है, लेकिन इसके लिए किसी अन्य सेटअप की आवश्यकता नहीं है।

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