如何:可以从 Unix 命令行获取参数的 MATLAB 脚本

Posted

技术标签:

【中文标题】如何:可以从 Unix 命令行获取参数的 MATLAB 脚本【英文标题】:How : MATLAB script that can get arguments from Unix command-line 【发布时间】:2012-08-31 22:25:26 【问题描述】:

为了具体起见,请考虑以下超级简单的 Python 脚本,在一个名为 add_em 的文件中:

#!/usr/bin/env python
# script name: add_em

from sys import argv

x = int(argv[1])
y = int(argv[2])
x_plus_y = x + y
print '%d' % x_plus_y

我现在可以运行此脚本,并从 Unix 命令行向它传递参数,如下所示:

% python add_em 3 8
11

如果我让脚本可执行,我什至不需要在命令行中提及python

% chmod +x add_em
% add_em 41 -29
12

有人可以告诉我如何编写(和运行)一个 MATLAB 脚本,以便它像上面的脚本一样执行吗?特别是,它必须能够从 Unix 命令行(与例如 MATLAB GUI 的“命令行”相反)读取其参数,并将它们的数字总和打印到标准输出。

注意:此脚本不需要是“独立的”; IOW,可以假设 MATLAB 是本地安装的,甚至可以在命令行中提及 matlab(类似于上面的第一种形式,其中 python 解释器在命令行上显式调用)。

谢谢!

PS:不用说,这个脚本是“健壮”的对立面,但我的目标是制作一个易于传达的示例。

【问题讨论】:

这里有你的问题的答案:***.com/questions/3335505/… ,这个问题是针对 standalone 的(意味着在没有本地安装的 MATLAB 副本的情况下运行) .这就是为什么我在我的问题中强调我不需要这个。特别是,我不想想编译 MATLAB 脚本。 【参考方案1】:

您可以在 add_em.m 中使用 MATLAB 函数做您想做的事情

function add_em(x, y)
x_plus_y = x + y;
disp(x_plus_y);
exit;

然后使用-r 开关从Unix 命令行调用它。示例:

matlab -nodesktop -nojvm -nosplash -r "add_em(3, 8)" 

- 选项抑制桌面、java 和 splash,因此脚本/函数将在没有额外开销的情况下执行。

您还可以通过将输出重定向到日志文件(用于任何计算)或拖尾(例如,为了在终端上打印某些内容)来抑制 MATLAB 欢迎/版权消息

matlab -nosplash -nodesktop -nojvm -r "add_em(3, 8)" | tail -n 3

更新:刚刚发现这篇帖子/答案以及相关信息:suppress start message of Matlab

【讨论】:

你能澄清一下这个吗? MATLAB 如何知道在哪里可以找到定义函数的 .m 文件?你需要把它放在某个特定的地方才能让它工作吗? 更多关于matlab的输入参数的信息可以在se.mathworks.com/help/matlab/ref/matlablinux.html找到。 使用-r,您可以将各种 Matlab 语句连同您的脚本名称一起传递,例如填充您的工作区:matlab -r "a=5;myscript"将首先创建变量 a,然后运行您的脚本 myscript.m。

以上是关于如何:可以从 Unix 命令行获取参数的 MATLAB 脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何将命令行参数传递给 unix/linux 系统上正在运行的进程?

如何从 Unix 命令行安装 c 和 c++ 编译器,然后与 Eclipse 一起使用?

如何获取启动进程的命令行

go语言 从命令行获取参数解析

获取命令行的元素并将它们存储到数组中

如何从 shell 获取准确的命令行字符串?