¿Cómo puedo pasar argumentos de línea de comandos independiente de MATLAB ejecutable
se ejecuta en Linux/UNIX?

Necesito para compilar mi secuencia de comandos de MATLAB como un archivo independiente que se puede ejecutar en una máquina sin MATLAB presente. Necesita para ser capaz de trabajar de una manera similar a la de C del argv[], donde se realizan las siguientes acciones:

De la línea de comandos:

myfile argument1.txt argument2.txt

donde argumento 1 y 2 son los archivos de entrada y salida.

La sintaxis exacta no importa, pero debe funcionar como argv[]. ¿Qué es una función que podría hacer esto?


Lo que quiero decir es que tengo MATLAB en mi equipo, pero tengo que hacer un ejecutable independiente que se puede ejecutar en los sistemas Unix SIN MATLAB en los equipos (es un clúster, que sólo ha de MATLAB en un nodo). Necesito encontrar una manera de hacer el varargin la función sin tener MATLAB instalado en el equipo que ejecuta el programa. Si me pueden decir de MATLAB para poner el MATLAB biblioteca en cada ejecutable, que bien, como siempre es un completo paquete independiente.

3 Comentarios

  1. 24

    MATLAB página web tiene un
    trabajado-a través del ejemplo con instrucciones sobre cómo compilar una aplicación sencilla y cómo implementarlo en otro equipo. En esencia, usted necesita para instalar el
    MATLAB Compiler Runtime junto con su aplicación; el instalador
    para el tiempo de ejecución debe estar ya presente en el compilador de MATLAB
    instalación.

    Para pasar argumentos de línea de comandos de MATLAB ejecutable, puede definir un
    solo la función de MATLAB en el ejecutable: los argumentos de la
    la función se toman a partir de los parámetros de línea de comandos (el primer parámetro de línea de comandos es el primer argumento, y así sucesivamente).

    Por ejemplo, crear un archivo echo.m con el siguiente
    contenido:

    function exitcode = echo(a, b)
    
    display(a);
    display(b);
    
    exitcode = 0;

    Puede compilar este archivo y ejecutarlo con echo 1 2 3, y
    imprimir a=1 b=2.

    Tenga en cuenta que, cuando los argumentos se toman desde la línea de comandos, que son
    pasa a la función como cadenas, por lo que necesita para convertir a la
    los números usando el str2num función. Por ejemplo:

    function rc = display_product(a, b)
    
    a = str2num(a);
    b = str2num(b);
    
    display(a*b);
    
    rc = 0;
    • Lo que sobre el valor devuelto?
    • He intentado seguir el enlace y terminó en un genérico mathworks página. En un intento de encontrar una nueva, actualiza la url para que yo pudiera editar la respuesta con ella, me pidió un mathworks de inicio de sesión solo para tener acceso a la documentación. Creo que Mathworks es inconscientemente pidiendo a la gente a abandonar para octave, R, y numpy.
    • He sustituido el enlace roto con una nueva; pero no sé, (1) si este es el mismo contenido que he enlazado en el 2001, y (2) si una de MathWorks cuenta es necesaria para ver de la página (estoy de acuerdo con tu comentario final…)
    • He cambiado este enlace a uno que no contenga un número de versión. Este enlace no debe requerir una licencia a la vista (sólo se necesita una licencia para leer la documentación para las versiones anteriores de MATLAB, por lo tanto, un enlace con un número de versión, si son visibles ahora sin una licencia, no serán visibles cuando una nueva versión).
  2. 3

    Tuve el mismo problema y buscan una solución genérica al problema de que en una secuencia de comandos, los argumentos se pasan como cadenas, pero necesitaba como escalares o vectores.
    Suponga que tiene la siguiente función de

    function myfunc(arg1, arg2, varargs)
    end

    y usted tal vez desee ser capaz de llamar las cosas como

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

    y también como

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

    de modo que usted puede compilarlo y usarlo en la línea de comandos como

    myfunc 1 '[1 2 3]' optional1 2

    Para esto, me escribió la siguiente función:

    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

    Entonces soy capaz de utilizar el inputParser en myfunc como este:

    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;

    Como no encontré un fuera-de-la-caja manera de hacerlo, he puesto esta solución aquí, y espero que también puede ser útil a los demás.
    Si hay una mejor manera de lograr esto, por favor hágamelo saber.

  3. 2

    Realmente no se puede ejecutar MATLAB en un equipo sin MATLAB. Usted puede instalar el MCR (MATLAB Component Runtime), que es libre de instalar y ejecutar programas de MATLAB. Para construir un ‘independiente’ ejecutable usted también necesitará el compilador de MATLAB.

    Una vez que usted tiene todo lo que. MATLAB dispone de todas las facilidades que usted necesita para manejar argumentos de línea de comandos en la forma que necesita.

Dejar respuesta

Please enter your comment!
Please enter your name here