Suponha que;
Tenho um arquivo m no local:
C:\M1\M2\M3\mfile.m
E o arquivo exe do matlab está neste local:
C:\E1\E2\E3\matlab.exe
Quero executar este arquivo m com Matlab, da linha de comando, por exemplo, dentro de um arquivo .bat. Como posso fazer isso, existe uma maneira de fazer isso?
matlab
command-line
automation
hkBattousai
fonte
fonte
Respostas:
Um comando como este executa o arquivo m com sucesso:
"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m'); exit;"
fonte
Acho que um ponto importante que não foi mencionado nas respostas anteriores é que, se não for explicitamente indicado, o interpretador de matlab permanecerá aberto. Portanto, à resposta de @hkBattousai adicionarei o
exit
comando:"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m');exit;"
fonte
mfile.m
disparar um erro, aexit
função explícita nunca é chamada, fazendo todo o processo esperar ...Aqui está o que eu usaria em vez disso, para lidar com erros do script normalmente:
Se você quiser mais verbosidade:
Encontrei a referência original aqui . Já que o link original acabou, aqui está o link para um novo leitor alternativo que ainda está vivo hoje:
fonte
No Linux, você pode fazer o mesmo e pode enviar de volta ao shell um código de erro personalizado, como o seguinte:
ele imprime
matlab exit code: 1
se o script lançar uma exceção,matlab exit code: 0
caso contrário.fonte
"try, run('/foo/bar/my_script.m'), catch e, disp(getReport(e)), exit(1), end, exit(0);"
Aqui estão as etapas:
cd C:\M1\M2\M3
C:\E1\E2\E3\matlab.exe -r mfile
Os sistemas Windows usarão sua pasta atual como local para o MATLAB procurar arquivos .m, e a
-r
opção tenta iniciar o arquivo .m fornecido assim que a inicialização ocorrer.fonte
CreateProcessW()
.E eu uso Ubuntu
fonte
Graças a malat. Seu comentário me ajudou. Mas eu quero adicionar meu bloco try-catch, pois encontrei o
MExeption
métodogetReport()
que retorna a mensagem de erro inteira e a imprime no console do matlab.Além disso, imprimi o nome do arquivo, pois essa compilação faz parte de um script em lote que chama matlab.
Para um nome de modelo falso passado ao método de geração de código legado, a saída seria:
Finalmente, para exibir a saída na janela do prompt de comando do Windows, basta registrar o console do matlab em um arquivo com
-logfile logfile.txt
(use adicionalmente-wait
) e chamar o comando batchtype logfile.txt
fonte
Desde R2019b, existe uma nova opção de linha de comando
-batch
,. Ele substitui-r
, o que não é mais recomendado. Ele também unifica a sintaxe entre plataformas. Veja por exemplo a documentação para Windows , para as outras plataformas a descrição é idêntica.Isso inicia o MATLAB sem a área de trabalho ou tela inicial, registra todas as saídas para
stdout
estderr
, sai automaticamente quando a instrução é concluída e fornece um código de saída relatando sucesso ou erro.Portanto, não é mais necessário usar
try
/ emcatch
torno do código para ser executado e não é mais necessário adicionar umaexit
instrução.fonte
Eu executo este comando em um script bash, em particular para enviar tarefas SGE e coisas de processamento em lote:
fonte
Como nenhuma das respostas contém informações sobre como alimentar o argumento de entrada, é importante adicioná-lo aqui. Depois de alguma pesquisa, encontrei este link
Alimentar os argumentos é muito semelhante a como executamos uma função Matlab.
Se você está de alguma forma recebendo um argumento do bash / terminal, você simplesmente precisa inseri-lo no comando bash como:
(Isso depois de algumas tentativas e erros)
fonte