2016-11-30 177 views
3

我从Windows命令提示符下运行MATLAB脚本:力Matlab的输出到命令行

"C:\Program Files\MATLAB\R2014B\bin\matlab" -nodisplay -nosplash -nodesktop -wait -r "test.m" 

的test.m很简单:

function test 
disp('Hello!'); 

输出显示在MATLAB命令窗口。有什么办法可以强制输出到Windows提示符?

+0

这并不是您寻找的答案,但您可以使用'system'命令调用'echo',但是需要您修改m文件。 – Danny

+0

@Danny。感谢您的评论。是的,它不会帮助,因为'system'的输出也会转到命令窗口,而不是windows命令提示符。 – Anton

回答

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); 

那我应该用一个bat文件有一个附加的命令显示output.txt中的内容运行了Matlab

"C:\Program Files\MATLAB\R2014B\bin\matlab" -nodisplay -nosplash -nodesktop -wait -r "test.m" 
type output.txt 

type命令将在命令窗口中显示'output.txt'的内容。所以@matlabgui的回答几乎就在那里。谢谢。

这不是一个非常优雅的解决方案,但它的工作原理。

0

我不知道如何在Windows中执行此操作,以便让Matlab实际在DOS窗口中运行,而这正是您需要将显示器写入其中的操作。 (仅供参考:您可以在LINUX中 - 但我假设您需要在Windows中运行)。

对于在Matlab中运行,你有2个方案,我能想到的:在启动,将记录所有输出到您指定的文件

  1. -logfile文件 - 然而,当文件被写入到如何和磁盘是由Matlab控制的,我还没有测试过 - 如果你的代码没有做太多,它可能只写在Matlab出口。

  2. 日志文件在Matlab命令中,即-r "diary FILE.TXT; test.m; diary OFF" - 这与上面类似 - 但使用了diary函数。

但是你可以得到你想要的东西如果你可以运行你的代码编译(我知道那是一个很大的,如果因为你可能没有编译器 - 或者如果你经常要更新test.m这不是最高效...

当您从DOS提示符运行编译代码时,所有的终端消息都被写入到DOS提示符下。我建议的一个事情是,如果这样做合适的话,就是从安装目录中删除"splash.png"文件避免在DOS下运行时启动画面(可能不需要)。

+0

嗨matlabgui。感谢你的回答。我试过编译选项。由于某些原因,与批处理Matlab执行相比,它的运行速度要慢得多。而且,是的,我需要经常更新脚本。 – Anton

+0

致@matlabgui。日记和输出选项存在问题。我实际上需要从另一个程序中运行脚本,该脚本等待脚本的某个输出继续。它只是不会检查日记文件。无论如何,我感谢你的帮助。 – Anton

+0

使您的Matlab脚本保存具有所需输出的文件,并在其他程序中监视该文件。这个解决方案会容易得多。由于加载MCR所花费的时间,编译版本会变慢。 – matlabgui

1

从命令行(或任何其他shell或批处理(例如,cmd或bat)脚本)调用Matlab时,使用命令行选项-log
它没有记录为Matlab 2017b,但它的工作原理。

备注:在Matlab的Windows版本中不支持-nodisplay,但如果您想阻止它显示数字,请改为使用-noFigureWindows