28

如何将命令行参数传递给在 Linux/UNIX 上运行的独立 MATLAB 可执行文件?

我需要将我的 MATLAB 脚本编译为可以在没有 MATLAB 的机器上运行的独立文件。它需要能够以类似于 C 的方式工作argv[],您可以在其中执行以下操作:

命令行:

myfile argument1.txt argument2.txt

其中参数 1 和 2 是输入和输出文件。

确切的语法无关紧要,但它应该像argv[]. 有什么功能可以做到这一点?


我的意思是我的计算机上有 MATLAB,但我需要制作一个独立的可执行文件,它可以在那些计算机上没有 MATLAB 的 Unix 系统上运行(它是一个集群,只有一个节点上有 MATLAB)。我需要找到一种方法来制作 varargin 函数,而无需在运行该程序的计算机上安装 MATLAB。如果我可以告诉 MATLAB 将 MATLAB 库放在每个可执行文件中,那没关系,只要它是一个完整的独立包。

4

3 回答 3

25

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;
于 2011-06-01T14:01:49.863 回答
3

我遇到了同样的问题,并搜索了一个通用解决方案,即在脚本中,参数作为字符串传递,但需要作为标量或向量。假设你有以下功能

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

然后我可以像这样使用inputParsermyfunc

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;

由于我没有找到开箱即用的方法,因此我在此处发布了此解决方案,并希望它对其他人也有用。如果有更好的方法来实现这一点,请告诉我。

于 2016-05-03T08:42:55.787 回答
1

没有 MATLAB,您无法真正在计算机上运行 MATLAB。您可以安装免费安装的 MCR(MATLAB 组件运行时),并运行 MATLAB 程序。要构建“独立”可执行文件,您还需要 MATLAB 编译器。

一旦你拥有了这一切。MATLAB 具有以您需要的方式处理命令行参数所需的所有工具。

于 2010-07-26T14:14:56.710 回答