Mac OS XのコマンドラインからバッチモードのMathematica
-
05-07-2019 - |
質問
Mathematicaプログラムの単体テストの作成を開始し、いくつかのMakefileを使用してコマンドラインからすべてを制御したい。
Mathematica コマンドラインから実行できるようですが、 Mac OS Xでこれを開始するための基本的な手順は表示されません—誰もこれをやったことがありますか?
更新:
次のようなテストファイルの作成:
Print["hello"]; x := 1; y = x+1; z = y+1; Print["y="ToString@y]; Print["z="ToString@z]; Quit[];
そして
で実行します/Applications/Mathematica.app/Contents/MacOS/MathKernel -noprompt < test.m
は、ある種のバッチ処理に最も近いものです。ただし、出力は見苦しくなります。スクリプトのすべての行に改行が追加されます!
"hello" "y=2" "z=3"
これは、コンソール出力に情報を出力できるスクリプトに最も近いものですか?私はMathematica 6のみを使用していますが、それが違いをもたらさないことを願っています。
解決
これは、最終的に、私が期待するような出力を提供します:
/Applications/Mathematica.app/Contents/MacOS/MathKernel -noprompt -run "<<test.m"
理にかなっていると思います。これを .bash_profile
に追加すると、簡単に実行できます( mma test.m
のように):
mma () { /Applications/Mathematica.app/Contents/MacOS/MathKernel -noprompt -run "<<$1" ; }
dreevesの mash
Perlスクリプト。このアプローチよりも利点があります。
他のヒント
いくつかの実験により、 /Applications/Mathematica.app/Contents/MacOS/MathKernel
をコマンドラインから起動できることがわかりました。ただし、通常の -h
または-help
のコマンドラインフラグは受け入れないようです。
MASHプラグのPillsyとWill Robertsonに感謝します!関連するStackOverflowの質問は次のとおりです。コマンドライン引数、標準入力を使用して、コマンドラインからMathematicaプログラムを呼び出す、stdout、stderr
MASHを使用しない場合は、MASHが定義する次のユーティリティ関数を使用できます。 たとえば、標準のPrintは、通常はスクリプトに必要な文字列ではなく、引用符で文字列を印刷します。
ARGV = args = Drop[$CommandLine, 4]; (* Command line args. *)
pr = WriteString["stdout", ##]&; (* More *)
prn = pr[##, "\n"]&; (* convenient *)
perr = WriteString["stderr", ##]&; (* print *)
perrn = perr[##, "\n"]&; (* statements. *)
EOF = EndOfFile; (* I wish mathematica *)
eval = ToExpression; (* weren't so damn *)
re = RegularExpression; (* verbose! *)
read[] := InputString[""]; (* Grab a line from stdin. *)
doList[f_, test_] := (* Accumulate list of what f[] *)
Most@NestWhileList[f[]&, f[], test]; (* returns while test is true. *)
readList[] := doList[read, #=!=EOF&]; (* Slurp list'o'lines from stdin *)
MASHを使用するには、perlファイルを取得します。 mash.pl 、次にtest.mを次のようにします。
#!/usr/bin/env /path/to/mash.pl
prn["hello"];
x := 1;
y = x+1;
z = y+1;
prn["y=", y];
prn["z=", z];