2012-12-19 28 views
5

समाप्त करने के लिए MATLAB के लिए प्रतीक्षा नहीं कर रहा है मैं subprocess मॉड्यूल के माध्यम से पाइथन के साथ एक छोटी MATLAB स्क्रिप्ट इंटरफ़ेस कर रहा हूं। निम्नानुसार:पाइथन

cmd='(matlab -nosplash -nodesktop -r "optimizer;quit;")' 
p = subprocess.Popen(cmd,stdin=None,stdout=None,shell=True) 
#subprocess.Popen.wait(p) 
#p.wait() 
print "DONE?" 

लेकिन MATLAB शुरू होने से पहले भी "किया गया" मुद्रित किया जा रहा है! इसके कारण मेरा पूरा कोड टूट रहा है।

मैं कोशिश की है:

  • os.system का उपयोग करना() कॉल (यह वह जगह है जहाँ मैं शुरू कर दिया है, लेकिन मैं इतना है कि इसके पदावनत पर पढ़ें)
  • p.wait() और subprocess.Popen.wait का उपयोग करना। दोनों काम नहीं करते हैं।
  • 3 मिनट के मैन्युअल विराम का उपयोग करना (अधिकतम समय MATLAB औसत पर समाप्त होता है) सुपर स्लॉपी

मुझे क्या याद आ रही है? मेरे लिए

+0

मैटलैब को कॉल करने का प्रयास करते समय मेरे एएसपी.नेट एमवीसी पेज में भी ऐसा ही हुआ। क्या आप MATLAB में कोई विशिष्ट फ़ंक्शन चला रहे हैं, या आप इसे चालू करना चाहते हैं? – IronMan84

+0

@ IronMan84 मैं NumPy में गणितीय कोड काम करने में असमर्थ हूं इसलिए मैं अपने मैट्रिक्स को एक सीएसवी फ़ाइल में निर्यात कर रहा हूं, इसे MATLAB में पढ़ रहा हूं, कंप्यूटिंग और सीएसवी फ़ाइल का जवाब निर्यात कर रहा हूं और इसे पायथन में वापस पढ़ रहा हूं। –

+0

यदि आप कोष्ठक को हटाते हैं तो क्या होता है? – mgilson

उत्तर

4

वर्क्स ठीक:

import subprocess 
retcode = subprocess.call(["matlab", "-nosplash", "-nodesktop", "-r", "quit;"]) 
print "DONE", retcode 

स्प्लिट आदेश तर्क तदनुसार, केवल विकल्प है कि आप वास्तव में आवश्यकता होती है (shell=True की कोई आवश्यकता नहीं, उदाहरण के लिए) का उपयोग, कार्य का उपयोग सीधे करता है कि आप के बाद क्या कर रहे हैं (call), यानी, कॉल करने और पूरा होने की प्रतीक्षा करें।

अपनी स्थापना के आधार पर (http://www.mathworks.com/help/matlab/ref/matlabwindows.html देखें), मैटलैब को इस तरह से लॉन्च किया जा सकता है जैसे कि यह तुरंत निकलता है। इसे संभालने के लिए, अपनी तर्क सूची में "-वेट" जोड़ें।

+0

नहीं। न तो समाधान काम किया। जैसा कि मैंने दूसरे जवाब में उल्लेख किया है, मेरे पास लूप को छोड़कर एक अनंत प्रयास है और यह अभी भी लूप को छोड़कर प्रवेश कर रहा है। –

+0

"लूप को छोड़कर" दर्ज करना? वो क्या है ? मुझे लगता है कि ब्लॉक को छोड़कर आपको कुछ मतलब था, और फिर ऐसा लगता है कि आपको मैटलैब शुरू करने में कुछ त्रुटि है। – mmgp

+0

नहीं, मेरा मतलब था। मेरे पास ऐसा कुछ है: कोशिश करें: matlab कमांड। को छोड़कर: 1s के लिए सो जाओ और जारी रखें। कोई फर्क नहीं पड़ता कि मैं क्या करता हूं, यह ब्लॉक को छोड़कर प्रवेश करता रहता है। –

0

मेरी टिप्पणी के प्रति आपकी प्रतिक्रिया के आधार पर, मुझे अपने प्रश्न के उत्तर देने के साथ अपने प्रश्न का उत्तर दें, जिसकी आपकी एक समान प्रक्रिया थी (हालांकि सी # में)। MATLAB को समाप्त करने के लिए अपनी प्रक्रिया को मजबूर करने की कोशिश करने के बजाय (जो अभी स्पष्ट रूप से काम नहीं कर रहा है), बस उस CSV फ़ाइल को लिखे जाने की प्रतीक्षा करें। यदि आप संभवतः डुप्लिकेट करने के बारे में चिंतित हैं, तो बस फ़ाइल के अंत में वर्तमान दिनांक और समय जोड़ दें, और यह चाल चलनी चाहिए।

+0

यह अभी मेरा समाधान है। फ़ाइल के प्रकट होने के लिए अनंत लूप प्रतीक्षा कर रहा है। –

4

"-वाइट" ध्वज के साथ मैटलैब प्रारंभ करें। डॉक्यूमेनेशन से:

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