Linux/UNIXで実行されているスタンドアロンのMATLAB実行可能ファイルにコマンドライン引数を渡すにはどうすればよいですか?
MATLABスクリプトを、MATLABが存在しないマシンで実行できるスタンドアロンファイルとしてコンパイルする必要があります。 Cのargv[]
と同様に機能する必要があります。ここで、次のことを行います。
コマンドライン:
myfile argument1.txt argument2.txt
ここで、引数1と2は入力ファイルと出力ファイルです。
正確な構文は重要ではありませんが、argv[]
のように機能するはずです。これを行うことができる関数は何ですか?
つまり、コンピューターにMATLABがありますが、それらのコンピューターにMATLABがなくてもUnixシステムで実行できるスタンドアロンの実行可能ファイルを作成する必要があります(クラスターであり、1つのノードにMATLABしかない)。プログラムを実行しているコンピューターにMATLABをインストールせずにvarargin関数を作成する方法を見つける必要があります。完全なスタンドアロンパッケージである限り、MATLABにMATLABライブラリを各実行可能ファイルに配置するように指示できれば問題ありません。
私は同じ問題を抱えていて、スクリプトでは引数が文字列として渡されるが、スカラーまたはベクトルとして必要であるという問題の一般的な解決策を探しました。次の関数があるとします
function myfunc(arg1, arg2, varargs)
end
そしてあなたは多分それを
myfunc(1, [1 2 3], 'optional1', 2)
そしてまた
myfunc('1', '[1 2 3]', 'optional1', '2')
コンパイルして、次のようなコマンドラインで使用できるようにします。
myfunc 1 '[1 2 3]' optional1 2
このために、私は次の関数を書きました:
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
次に、myfunc
で inputParser を次のように使用できます。
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;
すぐに使える方法が見つからなかったので、このソリューションをここに投稿し、他の人にも役立つことを願っています。これを達成するためのより良い方法があれば、私に知らせてください。
MATLABがインストールされていないコンピューターで実際にMATLABを実行することはできません。無料でインストールできるMCR(MATLAB Component Runtime)をインストールして、MATLABプログラムを実行できます。 「スタンドアロン」実行可能ファイルを作成するには、MATLABコンパイラも必要です。
あなたはそれをすべて持ったら。 MATLABには、コマンドライン引数を必要な方法で処理するために必要なすべての機能があります。