Frage

Ich möchte für meine Mathematica Programme zu schreiben einige Unit-Tests beginnen und mit einigen Makefiles alles von der Kommandozeile steuern.

Es scheint, wie Mathematica kann von der Kommandozeile ausgeführt werden aber ich kann siehe ‚t keine grundlegende Hinweise zu den ersten Schritten mit tun dies auf Mac OS X - getan hat jemand dies vor


Update:

eine Testdatei wie folgt erstellen:

Print["hello"];
x := 1;
y = x+1;
z = y+1;
Print["y="ToString@y];
Print["z="ToString@z];
Quit[];

Und läuft es mit

/Applications/Mathematica.app/Contents/MacOS/MathKernel -noprompt < test.m

ist die nächste, die ich zu irgendeiner Art von Batch-Verarbeitung zu erhalten. Die Ausgabe sieht hässlich aus, obwohl; Zeilenumbrüche werden für jede Zeile des Skripts hinzugefügt!

"hello"




"y=2"

"z=3"

Ist dies das nächste, was ich an ein Skript bekommen, die können noch Ausgangsinformationen an die Konsole ausgegeben? Ich verwende nur Mathematica 6, aber ich hoffe, dass kein Unterschied macht.

War es hilfreich?

Lösung

Das schließlich Ausgang gibt, wie ich es erwarten würde:

/Applications/Mathematica.app/Contents/MacOS/MathKernel -noprompt -run "<<test.m"

Das macht Sinn, nehme ich an. Addiert man diese zu meiner .bash_profile ermöglicht eine einfache Ausführung (wie in mma test.m):

mma () { /Applications/Mathematica.app/Contents/MacOS/MathKernel -noprompt -run "<<$1" ; }

Siehe auch dreeves des mash Perl-Skript, die Vorteile gegenüber diesem Ansatz bieten kann.

Andere Tipps

Mit einigen Experimenten fand ich, dass /Applications/Mathematica.app/Contents/MacOS/MathKernel aus der Befehlszeile gestartet werden. Es scheint nicht die üblichen -h oder --help Befehlszeilen-Flags zu akzeptieren, though.

Dank Pillsy und Will Robertson für den MASH Stecker! Hier ist die relevante Frage Stackoverflow: Rufen Sie ein Mathematica-Programm von der Befehlszeile mit Kommandozeilen-args, stdin , stdout und stderr

Wenn Sie nicht MASH verwenden, sollten Sie die folgenden Nutzenfunktionen verwenden, die MASH definiert. Zum Beispiel wird die Standard-Print-Strings mit Anführungszeichen drucken - nicht in der Regel, was Sie in Skripten wollen

.
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 zu verwenden, nur, dass Perl-Datei packen, mash.pl , und dann machen Sie Ihren test.m wie folgt aus:

#!/usr/bin/env /path/to/mash.pl

prn["hello"];
x := 1;
y = x+1;
z = y+1;
prn["y=", y];
prn["z=", z];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top