Ser*_*nov 6 matlab command-line
这可能太容易了,但我不能谷歌答案:如何在matlab脚本中获取命令行参数.
我运行matlab matlab -nodisplay -r "run('script.m')"
,我希望将所有参数作为列表返回.类似于python的东西sys.argv
.我怎样才能做到这一点?
我正在使用Linux Mint和MATLAB 2015a.
我不知道方向解决方案(如内置函数)。但是,您可以使用以下解决方法之一:
1、方法
这仅适用于 Linux:
pid_wrapper.m
创建一个包含以下内容的文件:
function [] = pid_wrapper( parent_pid )
[~, matlab_pid] = system(['pgrep -P' num2str(parent_pid)]);
matlab_pid = strtrim(matlab_pid);
[~, matlab_args] = system(['ps -h -ocommand ' num2str(matlab_pid)]);
matlab_args = strsplit(strtrim(matlab_args));
disp(matlab_args);
% call your script with the extracted arguments in matlab_args
% ...
end
Run Code Online (Sandbox Code Playgroud)
像这样调用 MATLAB:
matlab -nodisplay -r "pid_wrapper($$)"
Run Code Online (Sandbox Code Playgroud)
这会将 MATLAB 父进程(即启动 MATLAB 的 shell)的进程 ID 传递给wrapper
. 然后,这可用于查找子 MATLAB 进程及其命令行参数,然后您可以在 中访问这些参数matlab_args
。
2、方法
此方法与操作系统无关,并且不会真正找出命令行参数,但由于您的目标是将附加参数传递给脚本,因此它可能适合您。
vararg_wrapper.m
创建一个包含以下内容的文件:
function [] = wrapper( varargin )
% all parameters can be accessed in varargin
for i=1:nargin
disp(varargin{i});
end
% call your script with the supplied parameters
% ...
end
Run Code Online (Sandbox Code Playgroud)
像这样调用 MATLAB:
matlab -nodisplay -r "vararg_wrapper('first_param', 'second_param')"
Run Code Online (Sandbox Code Playgroud)
这将传递{'first_param', 'second_param'}
给vararg_wrapper
您,然后您可以转发到您的脚本。