Как передать аргументы командной строки автономному исполняемому файлу MATLAB, работающему в Linux / Unix? - PullRequest
26 голосов
/ 26 июля 2010

Как передать аргументы командной строки в отдельный исполняемый файл MATLAB работает в Linux / UNIX?

Мне нужно скомпилировать мой скрипт MATLAB в виде отдельного файла, который можно запустить на компьютере без MATLAB. Он должен быть в состоянии работать так же, как C argv[], где вы делаете следующее:

Командная строка:

myfile argument1.txt argument2.txt

где аргументы 1 и 2 - входные и выходные файлы.

Точный синтаксис не имеет значения, но он должен работать как argv[]. Что это за функция, которая может это сделать?


Я имею в виду, что у меня есть MATLAB на моем компьютере, но мне нужно создать автономный исполняемый файл, который может работать в системах Unix БЕЗ MATLAB на этих компьютерах (это кластер, в котором MATLAB имеет только один узел). Мне нужно найти способ сделать функцию varargin без установки MATLAB на компьютер, на котором запущена программа. Если я могу сказать MATLAB поместить библиотеку MATLAB в каждый исполняемый файл, это нормально, если это полный автономный пакет.

Ответы [ 3 ]

24 голосов
/ 01 июня 2011

На сайте MATLAB есть проработанный пример с инструкциями о том, как скомпилировать простое приложение и как его развернуть на другом компьютере. По сути, вам нужно установить MATLAB Compiler Runtime вместе с вашим приложением; установщик для времени выполнения должен уже присутствовать в вашем компиляторе 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. Например:

function rc = display_product(a, b)

a = str2num(a);
b = str2num(b);

display(a*b);

rc = 0;
3 голосов
/ 03 мая 2016

У меня была та же проблема, и я искал общее решение проблемы, что в скрипте аргументы передаются в виде строк, но нужны как скаляры или векторы. Предположим, у вас есть следующая функция

function myfunc(arg1, arg2, varargs)
end

и, возможно, вы захотите назвать его как

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

а также как

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

, чтобы вы могли скомпилировать его и использовать в командной строке, например

myfunc 1 '[1 2 3]' optional1 2

Для этого я написал следующую функцию:

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

Тогда я могу использовать inputParser в myfunc следующим образом:

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;

Поскольку я не нашел готового способа сделать это, я публикую это решение здесь и надеюсь, что оно также может быть полезным для других. Если есть лучший способ добиться этого, пожалуйста, дайте мне знать.

2 голосов
/ 26 июля 2010

Вы не можете запустить MATLAB на компьютере без MATLAB. Вы можете установить MCR (MATLAB Component Runtime), который можно бесплатно установить, и запускать программы MATLAB. Для создания «автономного» исполняемого файла вам также понадобится компилятор MATLAB.

Как только у вас будет все это. В MATLAB есть все средства, необходимые для обработки аргументов командной строки так, как вам требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...