从命令行运行m文件时如何隐藏“MATLAB命令窗口”?

时间:2011-07-16 13:30:56

标签: windows matlab user-interface command-line command-prompt

我正在使用如下命令行字符串运行MATLAB:

C:\<a long path here>\matlab.exe -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m');"

m文件包含plot()函数,用于在x-y平面上绘制简单曲线。

m文件成功运行并使用上面指定的命令行字符串绘制绘图。但是,每次运行此命令时,都会出现一个名为“MATLAB Command Window”的窗口以及绘图。

如何使“MATLAB命令窗口”不显示,以便只显示绘图。

“MATLAB命令窗口”如下所示: enter image description here

4 个答案:

答案 0 :(得分:3)

好消息!

通过一些Java操作,它是可能的!启动MATLAB 通常(使用桌面等)现在运行setDesktopVisibility(false)并瞧!例如。

setDesktopVisibility(false);
mesh(rand(10));
pause;
setDesktopVisibility(true);

AFAIK使用matlab.exe选项无法在Windows上执行此操作。如果你真的需要隐藏它,我建议使用MATLAB Engine来显示你的数字。另外,如果它适用于简单的事情,如绘图等,你可以使用GNU Octave,它与M文件一起使用,并且没有像MATLAB那样的“命令窗口”(它在Windows命令提示符下运行并隐藏它不是很难)。

答案 1 :(得分:3)

如果您是从Windows上的其他程序运行Matlab,则可以使用Matlab COM Automation Server运行它。 ActiveX控件具有Visible属性,可以让命令窗口不可见,但看起来它会使图形可见。

以下是使用另一个Matlab作为控制器的示例。

ml = actxserver('Matlab.Application');
ml.Visible = false;
ml.Execute('surf(peaks)');

或者在VBScript中。

Set ml = CreateObject("Matlab.Application")
ml.Visible = false
ml.Execute("surf(peaks)")
ml.Execute("pause(4)")

这种交互模式可能更符合您的需求,具体取决于您的工作流程的结构,因为它可以让您启动Matlab流程一次并在其上发出许多绘图请求,从而节省启动成本并让您拥有多个情节立刻可见。

如果您仍想从命令行调用它,只需通过带有上述VBScript代码的.vbs包装器脚本运行它,但调用run('...\mfile.m')而不是surf(peaks)。您的mfile.m将需要一些GUI逻辑,使其阻止,直到用户解除绘图,替换pause调用,因此它在查看之前不会消失。

答案 2 :(得分:3)

执行命令

matlab -automation -wait -r "cd \'...\';..."

,将在用户会话中显示最小化的窗口。根据Amro的建议,我们可以将最小化的窗口发送到本地的winlogin会话,这样我们甚至看不到最小化的窗口:

psexec /i 0 matlab -nodesktop -wait -r "plot(rand(100,1)); print -dpng out.png;quit" >null 2>&1

,它将静默保存到C:\ Windows \ System32(如果启用了ISD服务,它可能会弹出一个交互式服务检测对话框窗口,并且/ s或/ x选项在Windows Server 2003或2008中不起作用。)

答案 3 :(得分:1)

com.mathworks.mde.desk.MLDesktop.getInstance.closeCommandWindow

您可以从命令行使用它:

-r "com.mathworks.mde.desk.MLDesktop.getInstance.closeCommandWindow; run('C:\<a long path here>\mfile.m');"