Как скрыть «командное окно MATLAB» при запуске m-файла из командной строки? - PullRequest
6 голосов
/ 16 июля 2011

Я использую 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».

Как мне сделать так, чтобы это "окно команд MATLAB" НЕ появлялось, чтобы была видна только графика.

«Командное окно MATLAB» выглядит следующим образом: enter image description here

Ответы [ 4 ]

3 голосов
/ 26 апреля 2013

Run:

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 голосов
/ 17 июля 2011

Если вы используете Matlab из другой программы в Windows, вы можете запустить его с помощью 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 обрабатывает один раз и выполняет для него много запросов на заговор, экономя затраты на запуск и позволяя вам видеть сразу несколько заговоров.

Если вы все еще хотите вызывать его из командной строки, просто запустите его через оболочку .vbsскрипт с указанным выше кодом VBScript, но вызовите run('...\mfile.m') вместо surf(peaks).Вашему mfile.m потребуется некоторая логика графического интерфейса, которая блокирует его до тех пор, пока пользователь не отклонит график, заменив вызов pause, поэтому он не исчезнет, ​​пока они не закончат его просмотр.

3 голосов
/ 16 июля 2011

Отличная новость!

С небольшим количеством манипуляций с Java это возможно! Запустите MATLAB обычно (с рабочим столом и т. Д.) Теперь запустите setDesktopVisibility (false) и вуаля! Например.

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

AFAIK, вы не можете сделать это в Windows, используя опции matlab.exe. Если вам действительно нужно это скрыть, я бы порекомендовал использовать MATLAB Engine для отображения вашей фигуры. Кроме того, если для простых вещей, таких как построение графиков и т. Д., Вы можете использовать GNU Octave , который работает с M-файлами и не имеет «командного окна», как MATLAB (он запускается в командной строке Windows и скрывается это не так сложно).

1 голос
/ 16 июля 2011
com.mathworks.mde.desk.MLDesktop.getInstance.closeCommandWindow

Вероятно, вы можете использовать его из командной строки как:

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