lunes, 17 de noviembre de 2014

Ejecutar comandos del sistema operativo en MATLAB


Esta entrada tiene como objetivo mostrar la utilización de comandos nativos del sistema operativo desde el entorno de MATLAB. Pero ¿para qué utilizar comandos del SO?, para muchas cosas desde luego, podría necesitarse para ejecutar un script escrito en otro lenguaje de programación (Perl, Python,…), configurar variables del sistema, compilar y/o ejecutar un código fuente, entre otras muchas tareas.

MATLAB proporciona la función system que permite ejecutar cualquier instrucción soportada por el SO, la cual debe pasarse como un string, por ejemplo:

>> system('cd')
C:\Users\User\Documents\MATLAB\MATLAB TYP
ans =
     0

En lo anterior cd es un comando del sistema operativo que devuelve el directorio actual (tal como lo hace la función cd de MATLAB). Note que además de la cadena esperada se devuelve un valor cero guardado en la variable ans, esto sirve como identificador de status, indicando, en este caso, que el  comando ha sido ejecutado de forma satisfactoria.

Existe la alternativa de colocar un ampersand (&) al final de la instrucción para indicar que la respuesta del sistema se mostrará en una consola o terminal nativa, para el caso anterior sería:

>> system('cd&')
ans =
     0

Como se observa, simplemente se devuelve el status en el Command Window e inmediatamente se abre una consola mostrando el resultado de evaluar el comando del SO.

Para Microsoft Windows o sistemas basados en DOS existe la alternativa de usar el símbolo de exclamación de apertura (!) antecediendo a un comando, siguiendo con el mismo ejemplo:

>> !cd   
C:\Users\User\Documents\MATLAB\MATLAB TYP 

En este caso no se devuelve un status, lo cual nos llevaría a sugerir que si se requiere mayor robustez de código entonces habría que optar por el uso de la función system.


Abriendo programas de Microsoft Windows…
Utilizando system podemos acceder a programas nativos de Windows (Paint, Bloc de Notas, Recorte de pantalla, …). Para ello basta con pasar como argumento el nombre del programa, por ejemplo para abrir el Bloc de Notas:

>> system('notepad&');

O para la herramienta Recortes (Windows 7):

>> system('SnippingTool&');


Ejecutando un script Python…
Normalmente para ejecutar un script desarrollado en Python debería teclearse en una consola (o terminal) algo similar a esto:

> python nombre_script.py

Obviando el hecho de que estamos situados en la carpeta correspondiente para nuestro script python.

Usando la función system esto debería funcionar de la misma manera que se explicó anteriormente, así pues en MATLAB habría de introducirse lo siguiente:

>> system('python ejemplo.py&')

Donde ejemplo.py es el nombre del script. En este caso sí que es muy necesario adicionar el ampersand al final de la instrucción, para evitar cualquier tipo de incompatibilidad entre las salidas y entradas estándar de MATLAB y Python.

No hay comentarios.:

Publicar un comentario