强制Matlab输出到命令行

时间:2016-11-30 01:36:12

标签: matlab

我正在从Windows命令提示符运行MATLAB脚本:

_cat/nodes

test.m很简单:

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

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

4 个答案:

答案 0 :(得分:2)

当您从命令行(或任何其他shell或批处理(例如cmd或bat)脚本)调用Matlab时,请使用命令行选项-log
它没有像Matlab 2017b那样记录,但它有效。

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

答案 1 :(得分:1)

我不知道在Windows中这样做的方法是让Matlab实际运行在DOS窗口中,这就是显示在其中所需的内容。 (仅供参考:您可以在LINUX中使用 - 但我认为您需要在Windows中运行。)

对于在Matlab中运行,你有两个我能想到的选择:

  1. -logfile FILE在启动时将所有输出记录到您指定的文件中 - 但是文件写入磁盘的方式和时间由Matlab控制,我没有测试过 - 如果您的代码没有'做得多,它可能只写在Matlab出口。

  2. Matlab命令中的日记文件,即.......... <Results> <CmdID>11</CmdID> <MsgRef>1</MsgRef> <CmdRef>11</CmdRef> <Item> <Source> <LocURI>./User/Vendor/MSFT/EnterpriseModernAppManagement/AppInstallation/29B91D81-19CB-41F7-97F3-FD56D2707EE9_cg4300pk5pzh2/LastError</LocURI> </Source> <Meta> <Format xmlns="syncml:metinf">int</Format> </Meta> <Data>-2147009296</Data> </Item> </Results> <Results> <CmdID>13</CmdID> <MsgRef>1</MsgRef> <CmdRef>12</CmdRef> <Item> <Source> <LocURI>./User/Vendor/MSFT/EnterpriseModernAppManagement/AppInstallation/29B91D81-19CB-41F7-97F3-FD56D2707EE9_cg4300pk5pzh2/LastErrorDesc</LocURI> </Source> <Data>error 0x8020001B: Opening the package from location lobApp.appxbundle failed.</Data> </Item> </Results> ........... - 这与上面类似 - 但使用-r "diary FILE.TXT; test.m; diary OFF"函数。

  3. 但是你可以得到你想要的东西如果你可以运行编译的代码(我知道这很重要,如果你没有编译器 - 或者你经常想要更新{{1}这不是最有效的......

    当您从DOS提示符运行已编译的代码时,所有终端消息都将写入DOS提示符。我建议如果这是合适的一件事是从安装目录中删除diary文件,以避免从DOS运行时显示启动画面(可能)不需要。

答案 2 :(得分: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文件运行Matlab,并附带一个额外的命令来显示output.txt的内容:

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

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

这不是一个非常优雅的解决方案,但它确实有效。

答案 3 :(得分:0)

自R2019b起,有一个新的命令行选项-batch,该选项将输出重定向到命令行并处理其他内容以进行批处理。参见the documentation for Windows

matlab -batch "statement to run"

这将在没有桌面或初始屏幕的情况下启动MATLAB,将所有输出记录到stdoutstderr,在语句完成时自动退出,并提供报告成功或错误的退出代码。