2013-04-26 4 views
3

Вот мой питон кодКак выйти после запуска скрипта matlab из командной строки?

DosCmd = 'matlab -wait -automation -nosplash -r "run \'' + to_run + "'\"" 
os.system(DosCmd) 
curve_file = open('curve/'+str(index)+'.curve','r') 

Я запустить файл .m в питон скрипт, он отлично работает, но после выполнения файла .m, он застрял в os.system(DosCmd). Для того, чтобы питон запустить следующий код, я должен закрыть это окно:

enter image description here

Поскольку эта часть кода находится в цикле, это действительно беспокоит меня. Я нашел, что кто-то в Интернете говорит, что Matlab может автоматически выйти после выполнения файла .m, но мой просто не делает. Кто-нибудь скажет, что я сделал не так, или что мне делать? Thx!

+0

Попробуйте разбить ключи 'CTRL + C' – Guy

+1

Вы пробовали' exit'? – fpe

ответ

4

Добавьте вызов к exit в код MATLAB, который вы выполняете.

DosCmd = 'matlab -wait -automation -nosplash -r "run \'' + to_run + "', exit\"" 

Ваш процитировать выглядит немного шаткий ум вам, но вам просто нужно добавить , exit в конце команды, который вы передаете в -r аргумента.

Кстати, это было бы намного проще с subprocess, так что вы могли бы позволить subprocess сделать цитату для вас.

subprocess.check_call(['matlab', '-wait', '-automation', '-nosplash', 
    '-r', 'run \' + to_run + \', exit']) 
+0

Thx, это работает! Еще один вопрос, есть ли способ, чтобы я мог «повторно использовать» matlab вместо того, чтобы запускать его снова и снова? – laike9m

+0

Ну, JonB накрыл это довольно хорошо, я думаю. «mlabwrap» выглядит хорошо для меня. Вы можете использовать MATLAB как COM-сервер, но я подозреваю, что «mlabwrap» будет намного чище. –

2

Добавить команду exit в последнюю строку вашего скрипта.
Переключатель командной строки -wait означает, что приложение стартера не будет закрываться до выхода Matlab. Если вы активно используете python с выходом ML, то -wait верен, иначе избавиться от -wait.

Кроме того, вы уверены, что действительно хотите запускать новую сессию Matlab каждый раз в цикле? Matlab предоставляет функции DDE, которые позволят вам открыть один экземпляр и отправить команды.

Или вы можете посмотреть PyMat, или mlabwrap и т. Д., Одну из существующих библиотек мостов python для matlab.

+0

спасибо! Мне нужно «подождать», потому что вывод ML - это то, о чем я буду говорить дальше. – laike9m

+0

Кажется, что PyMat и mlabwrap не обновлялись годами ... Но я использую python3 ... – laike9m

+2

@ laike9m: используйте COM-интерфейс: http://stackoverflow.com/a/2885122/97160 (убедитесь, что вы запустили 'matlab -regserver' хотя бы один раз раньше) – Amro

Смежные вопросы