在命令行脚本完成之前,如何停止MATLAB返回?

时间:2020-03-05 18:40:21  来源:igfitidea点击:

我在MATLAB帮助(matlab -h)中看到可以使用-r标志来指定要运行的m文件。我注意到当我这样做时,MATLAB似乎启动了脚本,但是立即返回。脚本运行正常,但是主应用程序已经返回。

有什么方法可以让MATLAB仅在命令完成后才返回?如果要从一个单独的程序中调用它,那么似乎等待该过程要比使用文件或者套接字来确认完成要容易得多。

为了说明这一点,这是一个示例函数waitHello.m

function waitHello
    disp('Waiting...');
    pause(3); %pauses 3 seconds
    disp('Hello World');
    quit;

我尝试使用以下命令运行它:

matlab -nosplash -nodesktop -r waitHello

解决方案

回答

快速回答:

matlab -wait -nosplash -nodesktop -r waitHello

在Matlab 7.1(我拥有的版本)中,matlab.bat中有未记录的命令行选项-wait。如果它不适用于版本,则可以添加它。这就是我发现的内容。最终启动matlab的底部命令是(第153行):

start "MATLAB" %START_WAIT% "%MATLAB_BIN_DIR%\%MATLAB_ARCH%\matlab" %MATLAB_ARGS%

在这种情况下,启动命令的相关语法(请参阅cmd.exe中的"帮助启动"):

start ["window title"] [/wait] myprogram.exe args ...

在所有记录的命令行选项中,我发现更高一点(第60行):

) else if (%opt%) == (-wait) (
  set START_WAIT=/wait
) else (

因此,只要我们还从脚本中退出matlab,指定-wait应该可以完成我们想要的操作(否则它将等待我们以交互方式终止它)。