23

Linux/UNIX에서 실행되는 독립 실행 형 MATLAB 실행 파일 에 명령 줄 인수를 전달하는 방법은 무엇입니까?Linux/Unix에서 실행되는 독립 실행 형 MATLAB 실행 파일에 명령 줄 인수를 전달하는 방법은 무엇입니까?

MATLAB이없는 컴퓨터에서 실행할 수있는 독립 실행 형 파일로 MATLAB 스크립트를 컴파일해야합니다.

명령 행 : 그것은 당신이 다음을 수행 C의 argv[] 유사한 방식으로 작동 할 수 있어야

인수 1과 2는 입력 및 출력 파일은
myfile argument1.txt argument2.txt 

.

정확한 구문은 중요하지 않지만 argv[]처럼 작동해야합니다. 이것을 할 수있는 기능은 무엇입니까?


내 말은 내 컴퓨터에 MATLAB을 가지고,하지만 난 그 컴퓨터 (그것은 단지 하나 개의 노드에 MATLAB을 가지고, 클러스터의에 MATLAB없이 유닉스 시스템에서 실행할 수있는 독립 실행 파일을 만들 필요가있다). 프로그램을 실행하는 컴퓨터에 MATLAB을 설치하지 않고도 varargin 함수를 만드는 방법을 찾아야합니다. MATLAB에 각 실행 파일에 MATLAB 라이브러리를 넣으라고 지시 할 수 있다면 완성 된 독립 실행 형 패키지 인 한 괜찮습니다.

답변

2

MATLAB없이 컴퓨터에서 MATLAB을 실행할 수는 없습니다. 설치가 자유로운 MCR (MATLAB Component Runtime)을 설치하고 MATLAB 프로그램을 실행할 수 있습니다. '독립 실행 형'실행 파일을 빌드하려면 MATLAB 컴파일러가 필요합니다.

일단 모든 기능을 갖추고 있습니다. MATLAB은 필요한 방식으로 명령 행 인수를 처리하는 데 필요한 모든 기능을 갖추고 있습니다.

20

MATLAB 웹 사이트에는 worked-through example이 있으며 간단한 응용 프로그램을 컴파일하는 방법과 다른 컴퓨터에 배포하는 방법에 대한 지침이 나와 있습니다. 본질적으로 응용 프로그램과 함께 MATLAB 컴파일러 런타임을 설치해야합니다. 런타임 용 설치자 이 이미 MATLAB 컴파일러 설치에 있어야합니다.

당신이 실행에 하나의 MATLAB 함수를 정의하는 MATLAB 실행 파일에 명령 줄 인수를 전달하려면 : 함수의 인수가 명령 줄 매개 변수에서 가져옵니다을 (첫 번째 명령 줄 매개 변수는 첫 번째 인수는 , 등등).

예를 들어, 다음 내용으로 파일 echo.m을 만듭니다

function exitcode = echo(a, b) 

display(a); 
display(b); 

exitcode = 0; 

그런 다음이 파일을 컴파일하고 echo 1 2 3과 실행, 그리고 a=1 b=2를 인쇄 할 수 있습니다. 당신이 str2num 기능을 사용하여 숫자로 변환 할 수 있도록 인수가 명령 줄에서 촬영,

주, 그들은 문자열로 함수에 전달 있습니다.예를 들어,

+0

반환 값은 어떻게됩니까? – guilhermecgs

1

나는 스크립트에서 인수가 문자열로 전달되었지만 스칼라 또는 벡터로 필요하다는 문제에 대한 일반적인 해결책을 찾았습니다. 당신은 아마

myfunc(1, [1 2 3], 'optional1', 2) 

하고 컴파일 할 수

myfunc('1', '[1 2 3]', 'optional1', '2') 

그래서 또한 같은

및 사용과 같이 호출 할 수 있도록하려면

function myfunc(arg1, arg2, varargs) 
end 

다음과 같은 기능을 가지고 가정 그것은 명령 줄에

myfunc 1 '[1 2 3]' optional1 2 
012 나는이 같은 myfuncinputParser를 사용할 수 있어요 그리고

function r=evalArguments(parser, arguments) 
    % Evaluates parsed arguments' values. 
    % Given a parser containing parsed arguments, all string values of the 
    % arguments specified by parameter "arguments" are evaluated 
    % and the complete results is returned in a new struct. 

    r = parser.Results; 
    for j=1:length(arguments) 
     argValue = r.(arguments{j}); 
     if ischar(argValue) 
      r.(arguments{j}) = eval(argValue); 
     end 
    end 
end 

:

p = inputParser; 
p.addRequired('arg1'); 
p.addRequired('arg2'); 
p.addParameter('optional1', 0); 
p.parse(arg1, arg2, varargin{:}); 
nonStringArguments = {'arg1', 'arg2', 'optional1'}; 
args = evalArguments(p, nonStringArguments); 
... 
x = args.arg1; 
y = args.arg2; 
z = args.optional1; 

것은 내가 아웃 - 오브 - the-를 찾지 못했습니다 이에 대한 3,516,

, 나는 다음과 같은 기능을 썼다 상자 방법을 사용하여이 솔루션을 게시하고 다른 사용자에게 유용 할 수 있기를 바랍니다. 더 좋은 방법이 있다면 알려 주시기 바랍니다.

관련 문제