2013-08-26 8 views
6

के बीच संचार मेरे पास कुछ कंप्यूटर दृष्टि प्रणाली है जो मैटलैब में काम करती है। जब यह कुछ पता लगाता है तो मैं पाइथन को बताना चाहता हूं कि इसे मिला। बस बिना किसी अतिरिक्त जानकारी के हाँ या नहीं, लेकिन सिस्टम अनंत लूप में काम करता है, इसलिए मैं चाहता हूं कि पाइथन लगातार किसी भी तरह मैटलैब को ट्रैक करे।पायथन और मैटलैब

मुझे आश्चर्य है कि ऐसा करने का सबसे आसान तरीका क्या है।

उदाहरण के लिए, मैटलैब डेस्कटॉप पर एक फ़ाइल बना सकता है जो पाइथन कार्यक्षमता के अनुसार देख और ट्रिगर करेगा।

+0

फ़ाइल की चीज़ शायद सबसे आसान होगी। यू तेजी से लेखन/पढ़ने के लिए इस फ़ाइल को रैमडिस्क में या कम से कम एसएसडी पर बना सकता है। यह निर्भर करता है कि यह कितनी बार बदलता है। – Marcin

+0

मैटलैब एप्लिकेशन के पाइप स्टडआउट के बारे में क्या है और इसे पार्स करें? – moooeeeep

+1

@BranAlgue: इस दृष्टिकोण पर एक नज़र डालें: http://stackoverflow.com/a/10964190/97160, यह MATLAB – Amro

उत्तर

4

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

मैटलैब को एक खाली फ़ाइल (आउटपुट फ़ाइल के अलावा) को भी प्राप्त करने के लिए सबसे आसान तरीका होगा जब इसे कुछ मिल जाए। तो फिर तुम सिर्फ अगर फाइल नियमित अंतराल पर मौजूद os.path.exists() और time.sleep का उपयोग कर जाँच रख सकते हैं:

import os 
import time 

path='/path/to/file/created/by/matlab' 
while not os.path.exists(path): 
    print("Matlab output file still not present. Waiting for 1 s and retrying...") 
    time.sleep(1) 
print("Matlab process generated output. Now I can do what I want to do") 

आप matlab स्क्रिप्ट को नहीं बदल सकते हैं, तो आप mlabwrap पर एक नज़र है, जो एक मॉड्यूल है ले जा सकते हैं जो आप कर सकते हैं के माध्यम से पायथन के माध्यम से कॉल matlab। this answer भी देखें।

+0

में ट्रिगर किए गए किसी ईवेंट के पायथन को सूचित करने के लिए फ़ाइल सिस्टम का उपयोग करता है, नहीं, यह बाहर नहीं निकलता है। टेक्स्ट फ़ाइल को ट्रैक करने के लिए मुझे किस पायथन लाइब्रेरी का उपयोग करना चाहिए? –

+0

जब भी आपको कुछ मिल जाए तो मैटलैब एक खाली फ़ाइल बना सकता है। पायथन में, बस उस फ़ाइल को कुछ नींद के समय के साथ जांचते रहें। (इसे शामिल करने के लिए उत्तर भी संपादित किया गया) –

+0

@ Raze2dust: फ़ाइल सिस्टम परिवर्तनों के लिए मतदान के लिए प्रतीक्षा करने के बजाय बेहतर तरीके हैं। मेरी [टिप्पणी] देखें (http://stackoverflow.com/questions/18435546/communication-between-python-and-matlab#comment27104176_18435546) – Amro

7

यदि आपको निरंतर और तेज़ संचार की आवश्यकता है तो मैं सुझाव दूंगा कि आप अपना पायथन एप्लिकेशन listen on a specific port और connect to that port from MATLAB बनाएं। फिर आप दोनों दिशाओं में जानकारी का आदान-प्रदान कर सकते हैं।

+0

यह एक दिलचस्प समाधान है। क्या इस समाधान के पास फ़ाइल संचार पर फायदे हैं? –

+1

@BranAlgue: सिद्धांत फायदे गति (कोई डिस्क शामिल नहीं है) और पोर्टेबिलिटी (सभी ओएस, पायथन और MATLAB पर काम विभिन्न कंप्यूटरों पर चल सकते हैं)। हालांकि, यह लागू करने के लिए और भी जटिल है, इसलिए इष्टतम दृष्टिकोण आपके विशेष उपयोग मामले पर निर्भर करता है। –

+0

एक आकर्षण की तरह काम करता है लेकिन भेजे गए और प्राप्त बाइट्स की संख्या से सावधान रहना चाहिए, अन्यथा चीजें गड़बड़ हो जाती हैं। – karttinen