Comment puis-je passer des arguments de ligne de commande à un exécutable MATLAB autonome fonctionnant sous Linux/Unix?

Comment passer des arguments en ligne de commande à un exécutable MATLAB autonome fonctionnant sur Linux/UNIX?

je dois compiler mon script MATLAB comme un fichier autonome qui peut être exécuté sur une machine sans la présence de MATLAB. Il doit être capable de travailler d'une manière similaire à C argv[], où vous faites ce qui suit:

ligne de Commande:

myfile argument1.txt argument2.txt

où les arguments 1 et 2 sont les fichiers d'entrée et de sortie.

La syntaxe exacte n'a pas d'importance, mais il doit le travail de la forme argv[]. Ce qui est une fonction qui pourrait faire cela?


ce que je veux dire, c'est que J'ai MATLAB sur mon ordinateur, mais j'ai besoin de faire un exécutable autonome qui peut fonctionner sur des systèmes Unix sans MATLAB sur ces ordinateurs (c'est un cluster, qui n'a MATLAB que sur un seul noeud). Je dois trouver un moyen de faire fonctionner varargin sans que MATLAB soit installé sur l'ordinateur qui exécute le programme. Si je peux dire à MATLAB de mettre la bibliothèque MATLAB dans chaque exécutable, C'est bon, tant que c'est un paquet autonome complet.

23
demandé sur Peter Mortensen 2010-07-26 18:00:43

3 réponses

le site de MATLAB dispose d'un travaillé, par exemple avec des instructions pour compiler une application simple et la déployer sur un autre ordinateur. En essence, vous avez besoin d'installer le L'exécution du compilateur MATLAB avec votre application; l'installateur pour l'exécution devrait déjà être présent dans votre compilateur MATLAB installation.

pour passer des arguments en ligne de commande à un exécutable MATLAB, vous définissez fonction MATLAB unique dans l'exécutable: les arguments à l' la fonction est prise à partir des paramètres de la ligne de commande (le premier paramètre de la ligne de commande est le premier argument, et ainsi de suite).

Par exemple, créer un fichier echo.m avec les éléments suivants contenu:

function exitcode = echo(a, b)

display(a);
display(b);

exitcode = 0;

Vous pouvez alors compiler ce fichier et de l'exécuter avec echo 1 2 3, et il imprime a=1 b=2.

notez que, lorsque les arguments sont pris à partir de la ligne de commande, ils sont passée à la fonction comme chaînes de caractères, donc vous devez les convertir en nombre à l'aide de la str2num fonction. Par exemple:

function rc = display_product(a, b)

a = str2num(a);
b = str2num(b);

display(a*b);

rc = 0;
20
répondu Riccardo Murri 2018-02-18 16:57:14

vous ne pouvez pas vraiment exécuter MATLAB sur un ordinateur sans MATLAB. Vous pouvez installer le MCR (MATLAB Component Runtime), qui est libre d'installer, et exécuter les programmes MATLAB. Pour construire un exécutable "autonome", vous aurez également besoin du compilateur MATLAB.

une Fois que vous avez tout cela. MATLAB a toutes les facilités dont vous avez besoin pour gérer les arguments en ligne de commande de la façon dont votre require.

2
répondu High Performance Mark 2018-02-18 16:55:33

j'ai eu le même problème et j'ai cherché une solution générique au problème que dans un script, les arguments sont passés comme des chaînes, mais nécessaires comme des scalaires ou des vecteurs. Supposons que vous ayez la fonction suivante

function myfunc(arg1, arg2, varargs)
end

et peut-être vous voulez être en mesure de l'appeler comme

myfunc(1, [1 2 3], 'optional1', 2)

et

myfunc('1', '[1 2 3]', 'optional1', '2')

pour que vous puissiez le compiler et l'utiliser sur la ligne de commande comme

myfunc 1 '[1 2 3]' optional1 2

Pour cela, j'ai écrit ce qui suit fonction:

function r=evalArguments(parser, arguments)
    % Evaluates parsed arguments' values.  
    % Given a parser containing parsed arguments, all string values of the
    % arguments specified by parameter "arguments" are evaluated 
    % and the complete results is returned in a new struct.

    r = parser.Results;
    for j=1:length(arguments)
        argValue = r.(arguments{j});
        if ischar(argValue)
            r.(arguments{j}) = eval(argValue);
        end
    end
end

Ensuite, je suis en mesure d'utiliser le inputParsermyfunc comme ceci:

p = inputParser;
p.addRequired('arg1');
p.addRequired('arg2');
p.addParameter('optional1', 0);
p.parse(arg1, arg2, varargin{:});
nonStringArguments = {'arg1', 'arg2', 'optional1'};
args = evalArguments(p, nonStringArguments);
...
x = args.arg1;
y = args.arg2;
z = args.optional1;

comme je n'ai pas trouvé le moyen de le faire, je poste Cette solution ici et j'espère qu'elle pourra aussi être utile aux autres. S'il y a une meilleure façon d'y parvenir, veuillez me le faire savoir.

1
répondu esel 2016-05-06 09:22:58