2009-04-11 15 views
5

Acabo de comenzar a experimentar algo con Matlab, y como estoy acostumbrado a la interfaz de Vim, trato de mantenerme al margen del editor de Matlab tanto como sea posible. Lo que me preocupa es que cada vez que inicio un archivo .m, aparece la interfaz.Matlab en cmd (winxp)

¿Hay alguna manera de iniciar test.m desde una línea de cmd, y dejar que muestre la salida en un cmd, como lo haría normalmente en el entorno de Matlab? Algo así como un "shell de Matlab" (como el de Python, solo el de Matlab).

Respuesta

10

Para responder a su pregunta, inicie MATLAB como esto:

matalb -nodesktop -nosplash

Esto funciona tanto en Linux y Windows. En Linux, escribe esto en el símbolo del sistema, y ​​matlab se ejecutará en esa misma ventana de comando en modo texto. Entonces obtendrías el "caparazón de matlab" que querías. En Windows, cd en el directorio donde está instalado el matlab y escriba el mismo comando. Abrirá una ventana de línea de comandos matlab reducida, sin todas las campanas y silbatos del escritorio matlab.

Ahora bien, en mi opinión personal, el editor de MATLAB con su depurador integrado es su amigo. También tiene enlaces clave de emacs, si eso ayuda. También es más fácil ejecutar comandos y mirar los resultados en el escritorio de Matlab luego cuando se ejecuta matlab en modo de texto. La única vez que realmente desea usar el modo de texto es si su código de matlab tarda mucho tiempo en ejecutarse, y usted solo está interesado en el resultado final. O si está ejecutando varias instancias de matlab. El modo texto requiere mucha menos memoria, y en Linux puede iniciar fácilmente una ejecución desde la línea de comando y ponerla en segundo plano.

De hecho, compruebe los argumentos de línea de comandos para MATLAB. Puede hacer otras cosas interesantes, como hacer que matlab ejecute una sola función y salir, a la perl, o redirigir un script a Matlab de la siguiente manera: matlab < script.m

0

En entornos Linux, Matlab se puede iniciar en modo texto

matlab -nosplash -nodesktop 

pero esto no funciona en Windows. que lo inicia en el shell actual. En Windows, esto abre una nueva ventana de solo texto. No sé de ninguna manera para ejecutarlo dentro de la consola actual en Windows.

Quizás haya alguna forma de adjuntarlo ejecutando en http://www.mathworks.com/access/helpdesk/help/techdoc/index.html?/access/helpdesk/help/techdoc/ref/matlabwindows .shtml & http://www.google.com/search?rlz=1C1GGLS_enUS302US311 & sourceid = chrome & ie = UTF-8 & q = matlab + command + line + windows '> modo de servidor de automatización.

Otra opción si estás realmente desesperado podría ser hacer una máquina virtual e instalar Linux en ella. Entonces me imagino que hay formas de configurar vim para que funcione bien con Matlab (actualmente soy una persona de emacs y hay soluciones para emacs).

+0

sí, funciona en Windows. Abrirá una ventana de comando de matlab simple. – Dima

5

¿Está realmente dispuesto a hacer el trabajo de desarrollo sin un depurador m-file? Me parece que eso te limitaría a programas prácticamente triviales. Después de una curva de aprendizaje muy breve, creo que encontrarías que el depurador integrado Matlab es fantástico (y yo soy una persona VS).

Si insiste en hacerlo, su mejor opción es compilar sus archivos-m para que puedan ejecutarse por sí solos. Eso requeriría acceso al (no es barato) matlab compiler.

Tenga en cuenta que existe una diferencia significativa entre el compilador distribuido con las versiones de matlab hasta 6.5 y las distribuidas con matlab 7+ (no conoce los números de versión del compilador). En 6.5, el compilador generó c-code, que podría ser editado y compilado por separado. A partir de 7 en adelante, el compilador no compiló, convirtió ni generó código alguno: ejecutar un programa 'compilado' hoy prácticamente lo ejecuta en una máquina Matlab virtual llamada MCR, que abarca casi todas las funciones de los matlab. Es un masivo - instalador de MCR (instalador!) Ponderado 130M la última vez que lo verifiqué.
Aún se puede debatir sobre esto en los grupos de noticias, pero eso no es importante ahora. De hecho, el enfoque de MCR parece más cercano a lo que buscas.

Y por cierto, para mí matlab -nosplash -nodesktop funciona perfectamente en las ventanas - Se pone en marcha MATLAB como una consola, sino que privaría a ambos de un editor de texto y un depurador ...

2

Lo que yo haría es:

  1. inicio MATLAB
  2. no abrir el.archivo de m dentro de MATLAB
  3. Abrir el archivo en el editor de elección
  4. Ejecutar la función de MATLAB como de costumbre

No puedo imaginar ninguna razón por la que esto no funcionaría como MATLAB no debe cuidar qué se usó para editar el archivo

Esto no le dará una "cáscara", sino a toda la interfaz gráfica de usuario, pero no puedo pensar en ninguna razón por la que no querría tener que, si está disponible.

+1

Es posible que no desee toda la GUI si tiene una computadora lenta. – Dima

0

Tuve el mismo problema que Kigurai. Que necesitaba para conducir Matlab con Python así que encontré esta solución:

En Python:

import os 

os.chdir('W:\\monrépertoire') 

os.spawnl(os.P_NOWAIT, 'monscript.bat') 

En monscript.bat:

matlab.exe -r interp_3D -nodesktop –nosplash 
0

Hay casos en que de hecho no se necesita mucho depuración y el estado del Matlab se conservará entre invocaciones. Uno (¿el único?) Ejemplo sería Emacs org-mode. se puede usar para escribir texto intercalado con código de acuerdo con literate programming etc. Si bien es posible utilizar comentarios en Matlab y publish code ya sea HTML o LaTeX, sin embargo, es necesario que deje la comodidad de Emacs.

Hay una standalone program available que utiliza el motor de Matlab para evaluar los comandos recibidos en la entrada estándar, y volcar el resultado. Sin embargo, esta versión particular carece de soporte para comandos de líneas múltiples como if/else/end o for/end. Esta es una limitación de engEvalString que espera todo a la vez. Hay un ugly workaround available que lo convierte en usable suficiente para el modo org.

#+begin_src matlab :session *MATLAB* :exports none :cache no :results value 
if 3>1 
'wow!!!' 
end 
#+end_src 

#+RESULTS: 
: wow!!!