2012-08-31 24 views
7

Sólo por el bien de la concreción, considere la siguiente secuencia de comandos de Python súper sencilla, en un archivo llamado add_em:Cómo: script de MATLAB que se pueden obtener argumentos de Unix de línea de comandos

#!/usr/bin/env python 
# script name: add_em 

from sys import argv 

x = int(argv[1]) 
y = int(argv[2]) 
x_plus_y = x + y 
print '%d' % x_plus_y 

ahora puedo ejecutar este guión, y pasar argumentos a ella, desde la línea de comandos de Unix, así:

% python add_em 3 8 
11 

Si hago el script ejecutable, que ni siquiera es necesario mencionar python en la línea de comandos:

% chmod +x add_em 
% add_em 41 -29 
12 

Puede alguien me enseñe a escribir (y ejecutar) una secuencia de comandos de MATLAB para que realice exactamente igual que el anterior script hace? En particular, debe poder leer sus argumentos desde la línea de comandos de Unix (en lugar de, por ejemplo, la "línea de comando" de la GUI de MATLAB) e imprimir su suma numérica a la salida estándar.

NOTA: este script no necesita ser "independientes"; IOW, uno puede suponer que MATLAB está instalado localmente, e incluso ese puede mencionar matlab en la línea de comandos (análogamente a la primera forma anterior, donde el intérprete python se invoca explícitamente en la línea de comandos).

Gracias!

PD: No hace falta decir que este guión es la antítesis de "robusto", pero mi objetivo era producir un ejemplo fácilmente transmitido.

+0

Aquí hay una respuesta a su pregunta: http://stackoverflow.com/questions/3335505/how-can-i-pass-command-line- arguments-to-a-standalone-matlab-executable-running – piokuc

+0

*** No ***, esa questio n es para * standalone * (destinado a ejecutarse sin una copia de MATLAB instalada localmente). Es por eso que *** enfaticé *** en mi pregunta que no necesito esto. En particular, *** no quiero *** compilar el script de MATLAB. – kjo

Respuesta

8

Usted puede tener una función MATLAB haciendo lo que quiere dentro add_em.m

function add_em(x, y) 
x_plus_y = x + y; 
disp(x_plus_y); 
exit; 

y luego llamarlo desde la línea de comandos con el interruptor -r. Ejemplo:

matlab -nodesktop -nojvm -nosplash -r "add_em(3, 8)" 

Las opciones - suprimir escritorio, Java y salpicaduras de manera que el script/función se ejecutará sin costes adicionales.

Puede suprimir adicionalmente el mensaje MATLAB bienvenidos/copyright redirigiendo la salida a un archivo de registro (por ningún cálculo) o tizón, por ejemplo, la salida con el fin de conseguir algo impreso en el terminal

matlab -nosplash -nodesktop -nojvm -r "add_em(3, 8)" | tail -n 3 

actualización: acaba de descubrir esta publicación/respuestas con información relevante: suppress start message of Matlab

+0

Gracias por una gran respuesta. Desearía poder votarlo más. – kjo

+3

¿Puedes aclarar algo sobre este? ¿Cómo sabe MATLAB dónde encontrar el archivo .m que define la función? ¿Necesitas ponerlo en algún lugar específico para que esto funcione? –

Cuestiones relacionadas