Rufen Sie ein Mathematica-Programm von der Befehlszeile mit Kommandozeilen-args, stdin, stdout und stderr

StackOverflow https://stackoverflow.com/questions/148057

Frage

Wenn Sie Mathematica Code in foo.m haben, können Mathematica mit -noprompt aufgerufen werden und mit -initfile foo.m (Oder -run "<<foo.m") und die Befehlszeilenargumente sind in $CommandLine (gegen Junk da drin) aber gibt es eine Möglichkeit, nur einige Mathematica-Code haben wie

#!/usr/bin/env MathKernel
x = 2+2;
Print[x];
Print["There were ", Length[ARGV], " args passed in on the command line."];
linesFromStdin = readList[];
etc.

und chmod ausführbar und es laufen? Mit anderen Worten, wie kann man Mathematica verwenden wie jede andere Skriptsprache (Perl, Python, Ruby, etc.)?

War es hilfreich?

Lösung

MASH - Mathematica Scripting Hack - wird dies tun,

.

Da Mathematica Version 6, der folgende Perl-Skript genügt:

http://ai.eecs.umich.edu/people /dreeves/mash/mash.pl

Bei früheren Versionen von Mathematica, ein C-Programm benötigt wird:

http://ai.eecs.umich.edu/people/dreeves / Maische / PRE6

UPDATE: Endlich Mathematica 8 unterstützt diese nativ mit der „-script“ Befehlszeilenoption:

http://www.wolfram.com/ Mathematica / new-in-8 / Mathematica-shell-scripts /

Andere Tipps

Hier ist eine Lösung, die keine zusätzliche Hilfsskript erfordert. Sie können die folgenden shebang verwenden, um direkt auf den Mathematica Kernel aufrufen:

#!/bin/sh
exec <"$0" || exit; read; read; exec /usr/local/bin/math -noprompt "$@" | sed '/^$/d'; exit
(* Mathematica code starts here *)
x = 2+2;
Print[x];

Der shebang Code überspringt die ersten beiden Zeilen des Skripts und führt den Rest der Mathematica-Kernel als Standard-Eingabe. Das sed Befehl löscht leere Zeilen vom Kernel erzeugt.

Dieser Hack ist nicht so vielseitig wie MASH . Da der Mathematica-Code aus gelesen wird stdin können Sie nicht verwenden stdin für die Benutzereingabe, dh die Funktionen Input und input nicht funktionieren.

Versuchen
-initfile Dateiname
Und setzen Sie den Befehl exit in Ihr Programm

Angenommen, Sie die Mathematica-Binärdateien in die Umgebungsvariable PATH in ~ / .profile,

hinzufügen
export PATH=$PATH:/Applications/Mathematica.app/Contents/MacOS

Dann schreiben Sie ihn nur shebang Zeile in der Mathematica-Skripten.

#!/usr/bin/env MathKernel -script

Jetzt können Sie dot-Schrägstrich Ihre Skripte.

$ cat hello.ma
#!/usr/bin/env MathKernel -script

Print["Hello World!"]

$ chmod a+x hello.ma
$ ./hello.ma
"Hello World!"

Getestet mit Mathematica 8.0.

Minor Bug: Mathematica umgibt Drucken [s] mit Zitaten in Windows und Mac OS X, aber nicht Linux. WTF?

fand ich eine andere Lösung, die für mich gearbeitet.

Speichern Sie den Code in einer .m-Datei, dann ist es wie folgt ausführen: MathKernel -noprompt -run „<

Dies ist der Link: http: //bergmanlab.smith. man.ac.uk/?p=38

Für Mathematica 7

$ cat test.m
#!/bin/bash
MathKernel -noprompt -run < <( cat $0| sed -e '1,4d' )  | sed '1d'
exit 0
### code start Here ... ###
Print["Hello World!"]
X=7
X*5

Verbrauch:

$ chmod +x test.m

$ ./test.m
"Hello World!"

7
35
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top