30 votes

Comment appeler des fonctions MATLAB à partir de la ligne de commande Linux ?

En fait, j'ai un m qui ressemble à

function Z=myfunc()
    % Do some calculations
    dlmwrite('result.out',Z,',');
end

Je veux juste l'exécuter à partir de la ligne de commande sans entrer dans MATLAB. J'ai essayé plusieurs options ( -nodisplay , -nodesktop , -nojvm , -r etc.), aucune n'a fonctionné. Je finis par entrer dans MATLAB et je dois taper "quit" pour quitter.

Quelle est la solution ?

25voto

Alex Cohen Points 330

MATLAB peut exécuter des scripts, mais pas des fonctions à partir de la ligne de commande. Voici ce que je fais :

Fichier matlab_batcher.sh :

#!/bin/sh

matlab_exec=matlab
X="${1}(${2})"
echo ${X} > matlab_command_${2}.m
cat matlab_command_${2}.m
${matlab_exec} -nojvm -nodisplay -nosplash < matlab_command_${2}.m
rm matlab_command_${2}.m

Appelez-le en entrant :

./matlab_batcher.sh myfunction myinput

20voto

Douglas Forman Points 141

Utiliser :

matlab -nosplash -nodesktop -logfile remoteAutocode.log -r matlabCommand

Assurez-vous que matlabCommand comporte une sortie à la dernière ligne.

12voto

David Doria Points 2496

Vous pouvez appeler des fonctions comme suit :

matlab -r "votreFonction(0)"

7voto

DML Points 41

Voici une solution simple que j'ai trouvée.

J'ai une fonction func(var) que je voulais exécuter à partir d'un shell script et lui passer le premier argument pour var. J'ai mis ceci dans mon shell script :

matlab -nodesktop -nosplash -r "func('$1')"

Cela a fonctionné comme un charme pour moi. L'astuce consiste à utiliser des guillemets doubles avec la commande "-r" pour MATLAB et des guillemets simples pour passer l'argument bash à MATLAB.

Assurez-vous simplement que la dernière ligne de votre script MATLAB est "exit" ou que vous exécutez

matlab -nodesktop -nosplash -r "func('$1'); exit"

3voto

gerrit Points 1588

Vous pouvez exécuter une fonction arbitraire à partir de la ligne de commande en passant une commande à Matlab, comme ceci :

matlab -nodisplay -r "funcname arg1 arg2 arg3 argN"

Ceci exécutera la commande Matlab funcname('arg1', 'arg2', 'arg3', 'argN') . Par conséquent, tous les arguments seront transmis sous forme de chaînes de caractères et votre fonction devra gérer cela, mais cela s'applique également aux options de ligne de commande dans n'importe quel autre langage.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X