2013-09-04 4 views
6

मैं एक स्थिति है जहाँ मैं एक अजगर स्क्रिप्ट एक सतत पाश में चल रहा हो की जरूरत है से इनपुट के लिए सुनने के लिए एक अजगर स्क्रिप्ट प्राप्त करने के लिए, और मैं एक और स्क्रिप्ट जो जब एक चलेंगे से इसे में पैरामीटर भेजने की जरूरत है कार्रवाई होती है।कैसे एक और स्क्रिप्ट

दूसरे पटकथा cgi का उपयोग कर एक वेबसाइट से शुरू हो रहा हो जाएगा, मैं इस काम के ठीक है। निरंतर लूप को सीजीआई स्क्रिप्ट द्वारा पढ़े गए पैरामीटर में लेना चाहिए (और फिर एक सीरियल पोर्ट के माध्यम से जानकारी भेजें)।

विशिष्ट समस्या के लिए मैं हर बार यह सीरियल पोर्ट रीसेट करता है चलाता है के रूप में सीधे धारावाहिक के माध्यम से डेटा भेजने cgi स्क्रिप्ट नहीं हो सकता।

मैं सेटअप के इस प्रकार पर किसी भी जानकारी मिल नहीं कर पा रहे। क्या कोई तरीका या पुस्तकालय है जो मैं इस या इसके आने के बेहतर तरीकों के लिए देख सकता हूं?

+0

क्या आपने दूसरी स्क्रिप्ट को फ्लास्क या कुछ चलने के बारे में सोचा है और पैरामीटर स्वीकार करते हैं क्योंकि http पैरामीटर प्राप्त करते हैं? – JoelWilson

उत्तर

8

मैं सॉकेट कनेक्शन का उपयोग करूंगा। अनिवार्य रूप से आप एक बहुत ही सरल सर्वर है कि केवल एक समय

import socket 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind(("localhost", 9988)) 
s.listen(1) 

while True: 
    conn, addr = s.accept() 
    data = conn.recv(1024) 
    conn.close() 
    my_function_that_handles_data(data) 

s.accept() पर एक कनेक्शन लेता है एक अवरुद्ध कॉल लिख रहे हैं। यह एक कनेक्शन के लिए इंतजार कर रहा है। फिर आप कनेक्शन पर पढ़ते हैं। इस मामले में हम मानते हैं कि पैरामीटर की लंबाई केवल 1024 बाइट्स हैं। फिर हम सॉकेट से प्राप्त डेटा के साथ कुछ करते हैं और दूसरे कनेक्शन की प्रतीक्षा करते हैं।

ग्राहक ऐसा दिखाई दे सकता:

import socket 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect(("localhost", 9988)) 
s.sendall('My parameters that I want to share with the server') 
s.close() 

इस बारे में अच्छी बात है कि भविष्य में अगर क्लाइंट और सर्वर नहीं रह गया है एक ही मशीन पर चल रहा है तो यह करने के लिए "localhost" बदलने का एक साधारण बात है हैं कि वास्तविक आईपी पता या डोमेन नाम जिसे आप हिट करने जा रहे हैं।

+0

ऐसा लगता है कि यह सही हो सकता है, मैंने पहले सॉकेट में ठोकर खाई है लेकिन यह सुनिश्चित नहीं था कि वे इस उदाहरण के लिए कैसे काम करेंगे या उनका उपयोग कैसे करें, सरल उदाहरण के लिए धन्यवाद। बाद में इसे आजमाएं। – Ger

+0

सॉकेट बहुत लचीला हैं। आप कई प्रकार के सॉकेट बना सकते हैं जो आप बना सकते हैं। उन्हें नेटवर्क में होना जरूरी नहीं है। यदि आप लिनक्स का उपयोग कर रहे हैं तो आप एक डोमेन सॉकेट बना सकते हैं जिसे सिर्फ कर्नेल के माध्यम से रूट किया जाता है। – aychedee

+0

एक आकर्षण काम किया, धन्यवाद! – Ger

1

तुम क्या वर्णन कर रहे अंतर संचार प्रक्रिया (Python IPC) कहा जाता है की सामान्य अवधारणा।

पायथन में यह sockets और signals द्वारा किया जा सकता है।

भी उच्च स्तर/सॉकेट का उपयोग कर के ऊपर एक बने इंटरफेस रहे हैं; asyncore और asynchat

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