2011-02-28 30 views
6

मुझे पता है कि कच्चे_इनपुट का उपयोग मोड़ में नहीं किया जा सकता है। हालांकि यहां मेरा वांछित आवेदन है।मैं कच्चे_इनपुट का उपयोग कैसे कर सकता हूं?

मेरे पास हार्डवेयर का एक टुकड़ा है जो एक इंटरैक्टिव टर्मिनल सीरियल पोर्ट प्रदान करता है। मैं इस बंदरगाह से कनेक्ट करने की कोशिश कर रहा हूं और कमांड को एसिंक तरीके से भेज रहा हूं। मुझे इसकी ज़रूरत है क्योंकि यह एक मोटर नियंत्रक है कि एक बार जब मैं कमांड जारी करता हूं तो यह "ब्लॉक" और भाग जाएगा (मेरा वर्तमान कोड)। मुझे समस्याओं या खतरे के मामले में ईएसटीओपी जैसे एक और कमांड में प्रवेश करने में सक्षम होना चाहिए।

मैंने twisted.internet.stdio.StandardIO के बारे में कुछ सामान पढ़ा है, हालांकि मुझे बहुत भाग्य नहीं मिला है .. इस पर कोई सलाह/सहायता बहुत अच्छी होगी।

उत्तर

7

आपके पास यहां कुछ विकल्प हैं जिनका आप उपयोग कर सकते हैं। एक सीरियल बंदरगाह के साथ संचार करने के लिए एक बाल प्रक्रिया का उपयोग करना होगा और माता-पिता और बच्चे (जिसे ट्विस्टेड प्रोसेस प्रोटोकॉल द्वारा सरलीकृत किया गया है) के बीच संवाद करने के लिए एक पाइप का उपयोग करना होगा। दूसरा एक अलग पायथन थ्रेड को दूर करना और वहां से raw_input का उपयोग करना है। सामान्य इंटर-थ्रेड संचार तंत्र ट्विस्ट के साथ ठीक काम करते हैं। एकमात्र असली मोड़ अलग-अलग धागे से घुमावदार रिएक्टर को जगाते हुए आता है। इसके लिए प्राथमिक समर्थित तंत्र reactor.callFromThread() का उपयोग कर रहा है। ट्विस्ट में धागे के उपयोग के लिए कुछ सावधान विचार की आवश्यकता होती है और इसे पेंच करना आसान होता है (यही कारण है कि यह आम तौर पर निराश होता है) लेकिन कभी-कभी यह वास्तव में नौकरी के लिए सही उपकरण है।

3

क्या आपने मानकियो उदाहरण देखा है? Twisted core examples में एक जोड़े हैं, stdin.py और stdiodemo.py। a more advanced example है जिसमें ट्विस्टेड कॉंच में लाइन संपादन और इतिहास शामिल है। कार्रवाई में इसे देखने के लिए आप इसे python -m twisted.conch.stdio के साथ चला सकते हैं। कॉंच उदाहरण शायद पॉज़िक्स प्लेटफॉर्म पर काम करता है, न कि विंडोज़।

+0

stdin.py और stdiodemo.py उदाहरण बहुत प्राथमिक हैं। उदाहरण के लिए, वे यह नहीं दिखाते कि लाइन संपादन, इतिहास, टैब पूर्णता या अन्य सुविधाओं को कैसे करें, जिसे रीडलाइन इंटरफेस से उपयोग किया जाता है। उन्नत उदाहरण सिर्फ ConsoleManhole दिखाता है। क्या होगा यदि मैं कस्टम आदेश दर्ज करना चाहता हूं जो पायथन कोड नहीं हैं? और कोड में TerminalProcessProtocol क्या करता है? ऐसा कहीं भी संदर्भित नहीं लगता है। – blubberdiblub

+0

यह सच है। शायद आप अपने आप से एक प्रश्न पूछना चाहते हैं ... –

+0

हां, मैं अंततः कर सकता हूं। लेकिन सबसे पहले मैं मुड़कर लड़ने की कोशिश करूंगा और खुद को रेखांकित करूँगा (यही कारण है कि मैं उपयुक्त ट्यूटोरियल की तलाश में था) और यदि वह कोई फल नहीं लेता है, तो शायद मैं कहां फंस गया हूं, इस बारे में एक प्रश्न बना सकता हूं। – blubberdiblub

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