मतलाब: कमांड-लाइन से एक एम-फाइल चलाना


106

मान लो कि;

मेरे पास स्थान पर एक एम-फाइल है:
C:\M1\M2\M3\mfile.m

और इस स्थान पर matlab की exe फ़ाइल है:
C:\E1\E2\E3\matlab.exe

मैं इस m-फाइल को Matlab के साथ कमांड-लाइन से चलाना चाहता हूं, उदाहरण के लिए .bat फ़ाइल के अंदर। मैं यह कैसे कर सकता हूं, क्या ऐसा करने का कोई तरीका है?


1
आपको ये उपयोगी लग सकते हैं: stackoverflow.com/questions/14495/… , stackoverflow.com/questions/1857825/run-matlab-in-batch-mode
Amro

जवाबों:


106

इस तरह एक कमांड एम-फाइल को सफलतापूर्वक चलाता है:

"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m'); exit;"


इसी तरह के एक और सवाल का जवाब देने के लिए यहां है: stackoverflow.com/questions/25102699/…
Eghbal

6
यह अच्छा होगा यदि आप अपने उत्तर को अधिक व्यावहारिक और सहायक बनाने के लिए अंत में "निकास" कमांड जोड़ते हैं।
कामरान बिगली

3
"रन" कमांड में और उसके आसपास एकल और दोहरे उद्धरण चिह्न महत्वपूर्ण हैं!
कामरान बिगली

5
यदि आप तर्क पारित करना चाहते हैं तो क्या होगा?

क्या Windows संस्करण -nodesktop विकल्प का समर्थन करता है? मैंने सोचा नहीं, लेकिन गलत हो सकता है।
टेर्जे सैंडस्ट्रॉम

70

मुझे लगता है कि पिछले उत्तरों में एक महत्वपूर्ण बिंदु जिसका उल्लेख नहीं किया गया है, वह यह है कि यदि स्पष्ट रूप से संकेत नहीं दिया गया है, तो matlab दुभाषिया खुला रहेगा। इसलिए, @hkBattousai के उत्तर में मैं exitकमांड जोड़ूंगा :

"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m');exit;"


7
किसी कारण से अगर mfile.mकोई त्रुटि हो जाती है तो स्पष्ट exitफ़ंक्शन को कभी नहीं बुलाया जाता है, जिससे पूरी प्रक्रिया प्रतीक्षा में होती है ...
malat

41

यहाँ क्या मैं इसके बजाय का उपयोग करेंगे, इनायत से स्क्रिप्ट से त्रुटियों को संभालने के लिए:

"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "try, run('C:\<a long path here>\mfile.m'), catch, exit, end, exit"

यदि आप अधिक वाचालता चाहते हैं:

"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "try, run('C:\<a long path here>\mfile.m'), catch me, fprintf('%s / %s\n',me.identifier,me.message), end, exit"

मुझे यहां मूल संदर्भ मिला । चूंकि मूल लिंक अब चला गया है, यहाँ एक वैकल्पिक न्यूरीडर का लिंक आज भी जीवित है:


26

लिनक्स पर आप ऐसा ही कर सकते हैं और आप वास्तव में निम्नलिखित की तरह एक कस्टम त्रुटि कोड शेल पर वापस भेज सकते हैं:

#!/bin/bash
matlab -nodisplay -nojvm -nosplash -nodesktop -r \ 
      "try, run('/foo/bar/my_script.m'), catch, exit(1), end, exit(0);"
echo "matlab exit code: $?"

matlab exit code: 1यदि स्क्रिप्ट अपवाद को फेंकता है, तो यह प्रिंट करता है, matlab exit code: 0अन्यथा।


3
MATLAB के रूप में त्रुटि को प्रदर्शित करने के लिए जब इसे पकड़ नहीं होगा, बस करो "try, run('/foo/bar/my_script.m'), catch e, disp(getReport(e)), exit(1), end, exit(0);"
danieleds

13

यहाँ कदम हैं:

  1. कमांड लाइन शुरू करें।
  2. .M फ़ाइल के साथ फ़ोल्डर दर्ज करें cd C:\M1\M2\M3
  3. निम्नलिखित चलाएँ: C:\E1\E2\E3\matlab.exe -r mfile

Windows सिस्टम आपके वर्तमान फ़ोल्डर का उपयोग MATLAB के लिए .m फ़ाइलों को खोजने के लिए स्थान के रूप में करेगा, और -rविकल्प स्टार्टअप होते ही दिए गए .m फ़ाइल को प्रारंभ करने का प्रयास करता है।


1
यह .bat फ़ाइल के अंदर नहीं चलेगा। मैंने इसे एक उदाहरण के रूप में दिया। वास्तव में, मैं इसे Win32 API फ़ंक्शन द्वारा चलाऊंगा CreateProcessW()
hkBattousai


8

मालत को धन्यवाद। आपकी टिप्पणी से मुझे मदद मिली। लेकिन मैं अपनी कोशिश पकड़ को जोड़ना चाहता हूं, क्योंकि मुझे वह MExeptionविधि मिली getReport()जो पूरी त्रुटि संदेश देता है और इसे matlab कंसोल पर प्रिंट करता है।

इसके अतिरिक्त, मैंने फ़ाइल नाम को मुद्रित किया क्योंकि यह संकलन एक बैच स्क्रिप्ट का हिस्सा है जिसे मैटलैब कहते हैं।

try
    some_code
    ...
catch message
    display(['ERROR in file: ' message.stack.file])
    display(['ERROR: ' getReport(message)])
end;

लीगेसी कोड जेनरेशन विधि के लिए पारित एक गलत मॉडल नाम के लिए, आउटपुट ऐसा दिखेगा:

ERROR in file: C:\..\..\..
ERROR: Undefined function or variable 'modelname'.

Error in sub-m-file (line 63)
legacy_code( 'slblock_generate', specs, modelname);

Error in m-file (line 11)
sub-m-file

Error in run (line 63)
evalin('caller', [script ';']);

अंत में, विंडोज़ कमांड प्रॉम्प्ट विंडो में आउटपुट प्रदर्शित करने के लिए, बस एक फाइल के साथ मैटलैब कंसोल को लॉग इन करें -logfile logfile.txt(इसके अतिरिक्त उपयोग करें)-wait करें) और बैच कमांड को कॉल करेंtype logfile.txt


4

R2019b के बाद से, वहाँ, एक नया कमांड लाइन विकल्प है -batch। यह प्रतिस्थापित करता है -r, जिसे अब अनुशंसित नहीं किया गया है। यह प्लेटफार्मों भर में सिंटैक्स को भी एकीकृत करता है। उदाहरण के लिए देखें विंडोज के लिए प्रलेखन , अन्य प्लेटफार्मों के लिए विवरण समान है।

matlab -batch "statement to run"

यह डेस्कटॉप या स्प्लैश स्क्रीन के बिना MATLAB शुरू करता है, सभी आउटपुट को लॉग करता है stdoutऔर stderr, जब स्टेटमेंट पूरा हो जाता है, तो स्वचालित रूप से बाहर निकल जाता है और एक एक्जिट कोड रिपोर्टिंग सफलता या त्रुटि प्रदान करता है।

इस प्रकार यह अब चलाने के लिए try/ catchकोड के आसपास उपयोग करने के लिए आवश्यक नहीं है , और यह अब एक exitबयान जोड़ने के लिए आवश्यक नहीं है ।


2

मैं इस कमांड को bash स्क्रिप्ट के भीतर चलाता हूं, विशेष रूप से SGE जॉब्स और बैच प्रोसेस चीजों को सबमिट करने के लिए:

/Path_to_matlab -nodisplay -nosplash -nodesktop < m_file.m

0

चूँकि किसी भी उत्तर में इनपुट तर्क फीड करने की जानकारी नहीं है, इसलिए इसे यहाँ जोड़ना महत्वपूर्ण है। कुछ शोध के बाद, मुझे यह लिंक मिला

तर्कों को खिलाना बहुत ही समान है कि हम कैसे एक मैटलैब फ़ंक्शन चलाते हैं।

matlab -r 'try myfunction(argument1,argument2); catch; end; quit'

यदि आपको किसी तरह से bash / टर्मिनल से तर्क मिल रहा है, तो आपको बस इसे bash कमांड में डालने की आवश्यकता है:

matlab -r 'try myfunction($MY_BASH_ARG,argument2); catch; end; quit'

(यह परीक्षण और त्रुटि के एक जोड़े के बाद है)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.