假设
我在以下位置有一个m文件:
C:\M1\M2\M3\mfile.m
Matlab的exe文件位于以下位置:
C:\E1\E2\E3\matlab.exe
我想从命令行使用Matlab运行此m文件,例如在.bat文件中。我该怎么做,有办法吗?
假设
我在以下位置有一个m文件:
C:\M1\M2\M3\mfile.m
Matlab的exe文件位于以下位置:
C:\E1\E2\E3\matlab.exe
我想从命令行使用Matlab运行此m文件,例如在.bat文件中。我该怎么做,有办法吗?
Answers:
这样的命令将成功运行m文件:
"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m'); exit;"
我认为前面的答案中没有提到的重要一点是,如果未明确指出,则matlab解释器将保持打开状态。因此,在@hkBattousai的答案中,我将添加exit
命令:
"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m');exit;"
mfile.m
触发错误,exit
则永不调用显式函数,从而使整个过程处于等待状态
这是我将用来妥善处理脚本错误的方法:
"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "try, run('C:\<a long path here>\mfile.m'), catch, exit, end, exit"
如果您需要更多详细信息:
"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "try, run('C:\<a long path here>\mfile.m'), catch me, fprintf('%s / %s\n',me.identifier,me.message), end, exit"
我在这里找到了原始参考。由于原始链接现在不见了,因此这里是到今天仍然有效的备用新阅读器的链接:
在Linux上,您可以这样做,并且实际上可以将自定义错误代码发送回Shell,如下所示:
#!/bin/bash
matlab -nodisplay -nojvm -nosplash -nodesktop -r \
"try, run('/foo/bar/my_script.m'), catch, exit(1), end, exit(0);"
echo "matlab exit code: $?"
matlab exit code: 1
如果脚本抛出异常,则打印,matlab exit code: 0
否则显示。
"try, run('/foo/bar/my_script.m'), catch e, disp(getReport(e)), exit(1), end, exit(0);"
步骤如下:
cd C:\M1\M2\M3
C:\E1\E2\E3\matlab.exe -r mfile
Windows系统将使用当前文件夹作为MATLAB搜索.m文件的位置,并且该-r
选项会在启动后立即尝试启动给定的.m文件。
CreateProcessW()
。
感谢马拉特。您的评论对我有所帮助。但我想加我try-catch块,因为我找到了MExeption
方法getReport()
返回整个错误消息,并打印到控制台MATLAB。
另外,我打印了文件名,因为此编译是调用matlab的批处理脚本的一部分。
try
some_code
...
catch message
display(['ERROR in file: ' message.stack.file])
display(['ERROR: ' getReport(message)])
end;
对于传递给遗留代码生成方法的错误模型名称,输出如下所示:
ERROR in file: C:\..\..\..
ERROR: Undefined function or variable 'modelname'.
Error in sub-m-file (line 63)
legacy_code( 'slblock_generate', specs, modelname);
Error in m-file (line 11)
sub-m-file
Error in run (line 63)
evalin('caller', [script ';']);
最后,要在Windows命令提示符窗口中显示输出,只需将matlab控制台登录到一个文件-logfile logfile.txt
(另需使用-wait
),然后调用batch命令type logfile.txt
从R2019b开始,有一个新的命令行选项-batch
。它代替了-r
,不再建议使用。它还统一了跨平台的语法。例如,请参阅Windows的文档,对于其他平台,说明相同。
matlab -batch "statement to run"
这将在没有桌面或初始屏幕的情况下启动MATLAB,将所有输出记录到stdout
和stderr
,在语句完成时自动退出,并提供报告成功或错误的退出代码。
因此,不再需要在代码周围使用try
/ catch
来运行,也不再需要添加exit
语句。