पायथन का इंटरैक्टिव मोड REPL (Read-Evaluate-Print-Loop) सिद्धांत पर काम करता है। code मॉड्यूल REPL वातावरण सेटअप करने के लिए क्लासेस और फंक्शन्स प्रदान करता है।
मुख्य क्लासेस
1. InteractiveInterpreter
पार्सिंग और इंटरप्रेटर स्टेट (यूज़र नेमस्पेस) को हैंडल करता है।
runsource(source, filename, symbol)- सोर्स कंपाइल और चलाता हैruncode(code)- कोड ऑब्जेक्ट निष्पादित करता है
2. InteractiveConsole
InteractiveInterpreter का सबक्लास; इंटरैक्टिव पायथन कंसोल का व्यवहार अनुकरण करता है।
- पैरेंट के सभी मेथड्स विरासत में मिलते हैं
interact(banner, exitmsg)- इंटरैक्टिव कंसोल शुरू करता हैpush(line)- सोर्स टेक्स्ट की लाइन इंटरप्रेटर को भेजता हैresetbuffer()- अनहैंडल्ड सोर्स टेक्स्ट हटाता हैraw_input(prompt)- प्रॉम्प्ट लिखता है और लाइन पढ़ता है
कन्वीनियन्स फंक्शन्स
code.interact(local=None, exitmsg=None)- REPL लूप चलाने की सुविधाcode.compile_command(source, filename, symbol)- कमांड कंपाइल करता है (REPL मेन लूप के लिए)
उदाहरण: कस्टम इंटरैक्टिव कंसोल
import code
x = 10
y = 20
def add(x, y):
return x + y
print(f"जोड़: {add(x, y)}") # 30
# इंटरैक्टिव कंसोल शुरू करें
# local=locals() लोकल नेमस्पेस को डिफ़ॉल्ट बनाता है
code.interact(local=locals())
# कंसोल से बाहर आने के बाद (Ctrl+D / Ctrl+Z)
print(f"नए मान: x={x}, y={y}")
print(f"नया जोड़: {add(x, y)}")
नमूना सत्र आउटपुट
जोड़: 30 Python 3.6.6 |Anaconda custom (64-bit)| ... Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> x = 100 >>> y = 200 >>> exit() नए मान: x=100, y=200 नया जोड़: 300
उन्नत उदाहरण: कस्टम इंटरप्रेटर
import code
class MyInterpreter(code.InteractiveConsole):
def __init__(self, locals=None):
super().__init__(locals)
self.history = []
def push(self, line):
self.history.append(line)
return super().push(line)
def show_history(self):
for i, line in enumerate(self.history, 1):
print(f"{i}: {line}")
# उपयोग
interpreter = MyInterpreter(locals={'x': 10, 'y': 20})
interpreter.interact("माय कस्टम कंसोल - 'history()' टाइप करें हिस्ट्री देखने के लिए")
# कंसोल में:
# >>> history()
# 1: x = 100
# 2: y = 200
उपयोग के मामले
- एप्लिकेशन में एम्बेडेड पायथन शेल
- डीबगिंग कंसोल
- कॉन्फिगरेबल स्क्रिप्टिंग इंटरफेस
- शैक्षिक उपकरण
- कस्टम DSL (Domain Specific Language) रनर
सुरक्षा नोट
code.interact()पूर्ण पायथन एक्सेस देता है। अविश्वसनीय इनपुट के लिए उपयोग न करें। प्रोडक्शन में sandboxing (जैसेrestrictedpython) पर विचार करें।