强制Matlab输出到命令行

4
我正在从Windows命令提示符中运行MATLAB脚本:
"C:\Program Files\MATLAB\R2014B\bin\matlab" -nodisplay -nosplash -nodesktop -wait -r "test.m"

test.m是一个简单的程序:

function test
disp('Hello!');

输出结果会显示在Matlab命令窗口中。有什么方法可以强制将输出结果显示在Windows提示符中吗?

这不是你要找的答案,但你可以使用system命令来调用echo,但是这需要你修改你的m文件。 - Danny
@Danny。感谢您的评论。是的,这样做没有帮助,因为system的输出也会进入命令窗口,而不是Windows命令提示符。 - Anton
4个回答

5
当你从命令行(或任何其他shell或批处理脚本)调用Matlab时,请使用命令行选项-log。截至Matlab 2017b,它没有被记录在文档中,但它可以正常工作。
顺便说一句:-nodisplay不支持Windows版本的Matlab,但如果您想防止显示图形,请改用-noFigureWindows

我需要同时使用-log和-wait参数,以便在控制台中显示输出。 - JohnC

4
自 R2019b 版本开始,Matlab 新增了一个命令行选项:-batch,可将输出重定向到命令行并处理其他批量处理相关的事宜。请参阅 Windows 文档
matlab -batch "statement to run"

这将以无桌面或启动画面的方式启动MATLAB,将所有输出记录到stdoutstderr中,当语句完成时自动退出,并提供报告成功或错误的退出代码。


1
我不知道在Windows中如何让Matlab实际在DOS窗口运行,这是需要显示的内容所必需的。(FYI: 在LINUX中可以-但我假设你需要在Windows中运行)。
对于在Matlab中运行,我想到了两种选择:
1.在启动时使用-logfile FILE来记录您指定的所有输出到文件中,但是文件何时以及何时写入磁盘由Matlab控制,我还没有测试过-如果您的代码不做太多事情,它可能只会在Matlab退出时被写入。
2.在您的Matlab命令中使用diary FILE,即-r "diary FILE.TXT; test.m; diary OFF" - 这与上面类似,但使用diary函数。
但是,如果您可以编译运行代码,则可以获得所需的内容(我知道这是一个大问题,因为您可能没有编译器-或者如果您经常想要更新test.m,则这不是最有效的方法...
当您从DOS提示符运行编译代码时,所有终端消息都会写入DOS提示符。如果适用的话,我建议删除安装目录中的“splash.png”文件,以避免在从DOS运行时显示闪屏,因为它(可能)不需要。

嗨,matlabgui。谢谢你的回答。我已经尝试了编译选项。由于某种原因,它的执行速度比批处理Matlab慢得多。是的,我需要经常更新脚本。 - Anton
给 @matlabgui。日记和输出选项有问题。我实际上需要从另一个程序中运行脚本,该程序等待脚本的某个输出才能继续进行。它只是不会检查日记文件。无论如何,感谢您的帮助。 - Anton
让你的Matlab脚本保存一个带有所需输出的文件,并在其他程序中监视该文件。这个解决方案会更容易。由于加载MCR需要时间,编译版本会更慢。 - matlabgui

1
我已经在以下位置找到了解决方案:

https://www.mathworks.com/matlabcentral/answers/91607-how-can-i-redirect-the-command-window-output-to-stdout-and-stderr-when-running-matlab-7-8-r2009a-i#answer_100958

为了方便起见,我会在这里复制它。 首先,我需要修改Matlab脚本以输出到文本文件:

function test
fid=fopen('output.txt','w');
fprintf(fid,'Hello!');
fclose(fid);

然后,我应该使用一个批处理文件来运行Matlab,并添加一个命令来显示output.txt文件的内容:

"C:\Program Files\MATLAB\R2014B\bin\matlab" -nodisplay -nosplash -nodesktop -wait -r "test.m"
type output.txt
type 命令将在命令窗口中显示 'output.txt' 的内容。因此,@matlabgui 的答案几乎正确。谢谢。
这不是一个非常优雅的解决方案,但它有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接