Matlab : 명령 줄에서 m- 파일 실행


106

한다고 가정;

위치에 m 파일이 있습니다.
C:\M1\M2\M3\mfile.m

그리고 matlab의 exe 파일은 다음 위치에 있습니다.
C:\E1\E2\E3\matlab.exe

예를 들어 .bat 파일 내에서 명령 줄에서 Matlab으로이 m- 파일을 실행하고 싶습니다. 어떻게해야하나요? 방법이 있나요?


답변:


106

다음과 같은 명령은 m 파일을 성공적으로 실행합니다.

"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
답변을보다 실용적이고 유용하게 만들기 위해 끝에 "exit"명령을 추가하면 좋을 것입니다.
Kamran Bigdely

3
"run"명령 안팎의 작은 따옴표와 큰 따옴표는 중요합니다!
Kamran Bigdely

5
인수를 전달하려면 어떻게해야합니까?

Windows 버전이 -nodesktop 옵션을 지원합니까? 나는 생각하지 않았지만 틀릴 수 있습니다.
Terje Sandstrøm

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

Linux에서 동일한 작업을 수행 할 수 있으며 실제로 다음과 같은 사용자 지정 오류 코드를 셸로 다시 보낼 수 있습니다.

#!/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 2011


8

말라 트 덕분입니다. 귀하의 의견이 도움이되었습니다. 그러나 전체 오류 메시지를 반환하고 MATLAB 콘솔에 인쇄 하는 MExeption메서드 getReport()를 찾았 으므로 try-catch 블록을 추가하고 싶습니다 .

또한이 컴파일은 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 ';']);

마지막으로 Windows 명령 프롬프트 창에 출력을 표시하려면 matlab 콘솔을 -logfile logfile.txt(추가적으로 사용 -wait) 파일에 기록 하고 배치 명령을 호출하십시오.type logfile.txt


4

R2019b부터 새로운 명령 줄 옵션 인 -batch. -r더 이상 권장되지 않는을 대체합니다 . 또한 여러 플랫폼에서 구문을 통합합니다. 예를 들어 Windows 설명서를 참조하십시오 . 다른 플랫폼의 경우 설명이 동일합니다.

matlab -batch "statement to run"

이렇게하면 데스크톱 또는 스플래시 화면없이 MATLAB이 시작 stdout되고 모든 출력이 및에 기록 stderr되며 문이 완료되면 자동으로 종료되며 성공 또는 오류를보고하는 종료 코드를 제공합니다.

사용하는 것은 더 이상 이렇게 할 필요가 없습니다 try/ catch실행하는 코드 주위에, 그리고 추가하는 것은 더 이상 필요가 exit문을.


2

특히 SGE 작업 및 일괄 처리 작업을 제출하기 위해 bash 스크립트 내에서이 명령을 실행합니다.

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

0

답변에는 입력 인수 제공에 대한 정보가 없으므로 여기에 추가하는 것이 중요합니다. 조사 끝에이 링크를 찾았습니다

인수를 공급하는 것은 Matlab 함수를 실행하는 방법과 매우 유사합니다.

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

어떻게 든 bash / terminal에서 인수를 얻는 경우 다음과 같이 bash 명령에 삽입하면됩니다.

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

(이것은 몇 번의 시행 착오 후입니다)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.