.net - How to close the input stream of an IronPython engine executing a script? -
मैं एक IronPython इंजन को बहुत कम या तो बना रहा हूँ:
var इंजन = IronPython .Hosting.Python.CreateEngine (); Var स्कोप = engine.CreateScope (); // System.IO.stream var स्ट्रीम के मेरे कार्यान्वयन = नए ScriptOutputStream (इंजन); इंजन। रेंटाइम.आईओ एससेटऑटपुट (स्ट्रीम, एन्कोडिंग.यूटीएफ 8); इंजन। रेंटाइम.आईओएससेटएररऑटपुट (स्ट्रीम, एन्कोडिंग.यूटीएफ 8); इंजन। रेंटाइम.आईओएससेट इन्पुट (स्ट्रीम, एन्कोडिंग.यूटीएफ 8); Var स्क्रिप्ट = engine.CreateScriptSourceFromString (स्रोत, SourceCodeKind.Statements); script.Execute (गुंजाइश);
चर स्रोत
निम्नलिखित सामग्री (अजगर बयान) के साथ एक स्ट्रिंग है:
आयात कोड code.interact (कोई नहीं, कोई भी नहीं, {'__name__': '__console__', '__doc__': कोई नहीं,})
स्ट्रीम को एक विंडोज़ फार्म पर होस्ट किया जा रहा है। जब वह प्रपत्र बंद हो जाता है, तो मैं दुभाषिया को छोड़ने के लिए चाहता हूं। जाहिर है, मैंने पढ़ें
विधि में धारा को बंद करने की कोशिश की:
/// & lt; सारांश & gt; /// _inputbuffer से पढ़ें, जब तक कि कोई नई पंक्ति प्रविष्ट नहीं हो गई तब तक ब्लॉक करें ... /// & lt; / summary & gt; सार्वजनिक ओवरराइड इं पढ़ें (बाइट [] बफर, इंट ऑफ़सेट, इंट काउंट) {if (_gui.IsDisposed) {वापसी 0; // एमएसडीएन का कहना है कि यह दर्शाता है कि धारा बंद है} जबकि (_completedLines.Count & lt; 1) {// उपयोगकर्ता के लिए एक लाइन आवेदन को पूरा करने के लिए प्रतीक्षा करें। DoEvents (); Thread.Sleep (10); } Var लाइन = _completedLines.Dequeue (); वापसी लाइन। पढ़ें (बफर, ऑफसेट, गिनती); }
सदस्य चर _completedLines
में MemoryStream
ऑब्जेक्ट की पंक्तियों को दर्शाता है जो उपयोगकर्ताओं ने अभी तक प्रविष्ट की गई हैं। _gui
विंडोज़ फार्म का एक संदर्भ है - जब इसका निपटारा होता है, तो मैं किसी भी तरह से IronPython इंजन को code.interact ()
निष्पादित करना बंद करना चाहता हूं।
रिटर्न पिन मैंने भी लौटने की कोशिश की है < कोड> ^ जेड 0
से पढ़ें
विधि काम नहीं करती है ( पढ़ें
को अभी दोबारा कहा जाता है)। इनमें से किसी एक अपवाद को ऊपर उठाना या तो काम नहीं करता है: यह दुभाषिया को रोकना बंद करता है, लेकिन आईडीई पढ़ा विधि के भीतर टूट जाती है: (
(0x1a) और ^
(0x04) में पढ़ा
के बफर, क्योंकि इनको दुभाषिया छोड़ने के लिए कन्सोल पर उपयोग किया जाता है, लेकिन जो बिल्कुल भी काम नहीं करता ...
यह मुझे पता लगाने के लिए आपको दूसरा लग रहा है चाहता था, लेकिन यह IronPython में एक बग की तरह दिखता है। code.interact
को उम्मीद है कि एक EOFError को raw_input
से निर्मित किया जा सकता है संकेत करने के लिए कि यह लूप समाप्त होने का समय है, लेकिन IronPython ऐसा नहीं करता - यह सिर्फ एक खाली स्ट्रिंग देता है। यह IronPython है।
आप एंडोस्ट्रीम एक्सपेशन्शन को फेंकने की कोशिश कर सकते हैं, जो EOFError में परिवर्तित हो सकता है। ऐसा करने के लिए पर्याप्त हो सकता है।
< / div>
Comments
Post a Comment