Rufen Sie ein Mathematica-Programm von der Befehlszeile mit Kommandozeilen-args, stdin, stdout und stderr
-
02-07-2019 - |
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.)?
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ügenexport 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