## Running Matlab as a Python subprocess

Although NumPy and Scipy usually provide all the tools you need (and more) for scientific computing, sometimes you may want to use a bit of Matlab in the background. In my case, for example, to use rref. Conveniently, Matlab can be run as a Python subprocess, provided of course that Matlab is installed on your system.

import os

from subprocess import Popen
from scipy.io import savemat

import numpy as np

infile = os.path.join(os.path.dirname(__file__), 'infile.mat')
outfile = os.path.join(os.path.dirname(__file__), 'outfile.mat')

with open(infile, 'wb+') as fp: pass
with open(outfile, 'wb+') as fp: pass

A = np.array([
[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]], dtype=float)

indict = {'A': A}

savemat(infile, indict)

matlab  = ['matlab']
options = ['-nosplash', '-r']

# on mac use the full path to matlab or add the path to your .profile
# matlab = ['/Applications/MATLAB_R2016a.app/bin/matlab']

# on windows use:
# options = ['-nosplash', '-wait', '-r']

p = Popen(matlab + options + command)

stdout, stderr = p.communicate()