মতলব: কমান্ড-লাইন থেকে একটি এম-ফাইল চালাচ্ছেন


106

মনে করো যে;

আমার অবস্থানটিতে একটি এম-ফাইল রয়েছে:
C:\M1\M2\M3\mfile.m

এবং ম্যাটল্যাবের এক্সি ফাইলটি এই স্থানে রয়েছে:
C:\E1\E2\E3\matlab.exe

আমি এই এম-ফাইলটি মাতলাব দিয়ে কমান্ড-লাইন থেকে, উদাহরণস্বরূপ একটি .bat ফাইলের মধ্যে চালাতে চাই। আমি কীভাবে এটি করতে পারি, এটি করার কোনও উপায় আছে?


1
আপনি এই দরকারী খুঁজে পেতে পারেন: stackoverflow.com/questions/14495/… , stackoverflow.com/questions/1857825/run-matlab-in-batch-mode
আম্রো

উত্তর:


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
আপনি কি যুক্তি পাস করতে চান?

উইন্ডোজ সংস্করণটি -নোডস্কটপ বিকল্পটি সমর্থন করে? আমি ভেবেছিলাম না, তবে ভুল হতে পারে।
তেরজে স্যান্ডস্ট্রোম

70

আমি মনে করি যে একটি গুরুত্বপূর্ণ বিষয় যা পূর্ববর্তী উত্তরে উল্লেখ করা হয়নি তা হ'ল, যদি স্পষ্টভাবে নির্দেশ না করা হয় তবে মাতলাব দোভাষী খোলা থাকবে। সুতরাং, @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ক্রিয়াকলাপটি কখনই ডাকা হয় না, পুরো প্রক্রিয়াটি অপেক্ষা করে
তোলে

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: 0otherwise


3
ম্যাটল্যাব এটি ধরার সময় যেমন করত তেমনি ত্রুটি প্রদর্শন করতে, কেবল তাই করুন "try, run('/foo/bar/my_script.m'), catch e, disp(getReport(e)), exit(1), end, exit(0);"
ড্যানিয়েলেডস

13

পদক্ষেপ এখানে:

  1. কমান্ড লাইন শুরু করুন।
  2. .M ফাইল সহ ফোল্ডারটি প্রবেশ করান cd C:\M1\M2\M3
  3. নিম্নলিখিত চালান: C:\E1\E2\E3\matlab.exe -r mfile

উইন্ডোজ সিস্টেমগুলি আপনার বর্তমান ফোল্ডারটিকে এম। এম ফাইলগুলি অনুসন্ধান করার জন্য ম্যাটল্যাবের অবস্থান হিসাবে ব্যবহার করবে এবং -rবিকল্পটি সূচিত হওয়ার সাথে সাথে প্রদত্ত। এম ফাইলটি শুরু করার চেষ্টা করবে।


1
এটি .bat ফাইলের মধ্যে চলবে না। আমি উদাহরণ হিসাবে দিয়েছি। আসলে, আমি এটি Win32 এপিআই ফাংশন দ্বারা চালিত করব CreateProcessW()
hkBattousai


8

মালাতকে ধন্যবাদ। আপনার মন্তব্য আমাকে সাহায্য করেছে। তবে আমি আমার ট্রাই-ক্যাচ ব্লকটি যুক্ত করতে চাই, কারণ আমি এমন MExeptionপদ্ধতিটি পেয়েছি getReport()যা পুরো ত্রুটি বার্তাটি ফেরত দেয় এবং এটি ম্যাটলব কনসোলে প্রিন্ট করে।

অতিরিক্তভাবে আমি ফাইলের নাম মুদ্রণ করেছি কারণ এই সংকলনটি একটি ব্যাচের স্ক্রিপ্টের অংশ যা মাতলাব বলে।

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"

এটি ডেস্কটপ বা স্প্ল্যাশ স্ক্রিন ছাড়াই ম্যাটল্যাব শুরু করে, সমস্ত আউটপুট লগ করে stdoutএবং stderr, বিবৃতিটি সম্পূর্ণ হওয়ার পরে স্বয়ংক্রিয়ভাবে প্রস্থান করে এবং সাফল্য বা ত্রুটির প্রতিবেদন করার জন্য একটি প্রস্থান কোড সরবরাহ করে।

এইভাবে চালানোর জন্য কোডটির চারপাশে try/ ব্যবহার করা আর প্রয়োজন হয় না catchএবং exitবিবৃতি যুক্ত করার প্রয়োজন নেই ।


2

আমি বিশেষত এসজিই জব এবং ব্যাচ প্রক্রিয়া জিনিস জমা দেওয়ার জন্য একটি বাশ স্ক্রিপ্টের মধ্যে এই কমান্ডটি চালাচ্ছি:

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

0

যেহেতু উত্তরগুলির কোনওটিরই ফিডিং ইনপুট যুক্তি সম্পর্কিত তথ্য নেই, তাই এখানে এটি যুক্ত করা গুরুত্বপূর্ণ important কিছু গবেষণা করার পরে, আমি এই লিঙ্কটি খুঁজে পেয়েছি

যুক্তিগুলি খাওয়ানো আমরা মাতলাব ফাংশনটি কীভাবে পরিচালনা করি তার সাথে খুব মিল।

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

আপনি যদি কোনওভাবে বাশ / টার্মিনাল থেকে আর্গুমেন্ট পেয়ে থাকেন তবে আপনার কেবল এটি বাশ কমান্ডের মধ্যে asোকানো দরকার:

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

(এটি কয়েকটি পরীক্ষা এবং ত্রুটির পরে রয়েছে)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.