Chiamare un Mathematica programma da riga di comando, con la riga di comando argomenti, stdin, stdout e stderr
-
02-07-2019 - |
Domanda
Se si dispone di Mathematica codice in pippo.m, Mathematica può essere richiamato con -noprompt
e con -initfile foo.m
(o -run "<<foo.m"
)
e gli argomenti della riga di comando sono disponibili in $CommandLine
(con possibilità di spazzatura in là), ma c'è un modo per avere solo alcuni mathematica codice come
#!/usr/bin/env MathKernel
x = 2+2;
Print[x];
Print["There were ", Length[ARGV], " args passed in on the command line."];
linesFromStdin = readList[];
etc.
e chmod eseguibile e lanciarlo?In altre parole, come si fa a usare Mathematica come qualsiasi altro linguaggio di scripting (Perl, Python, Ruby, ecc)?
Soluzione
MASH - Mathematica Scripting Hack - lo farà.
Dalla Mathematica versione 6, è sufficiente il seguente script perl:
http://ai.eecs.umich.edu/people /dreeves/mash/mash.pl
Per le precedenti versioni di Mathematica, è necessario un programma C:
http://ai.eecs.umich.edu/people/dreeves / pastone / pre6
AGGIORNAMENTO: Finalmente Mathematica 8 lo supporta nativamente con il " -script " opzione da riga di comando:
http://www.wolfram.com/ Mathematica / new-in-8 / Mathematica-shell-scripts /
Altri suggerimenti
Ecco una soluzione che non richiede uno script di supporto aggiuntivo. Puoi usare il seguente shebang per invocare direttamente il kernel Mathematica:
#!/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];
Il codice shebang salta le prime due righe dello script e fornisce il resto al kernel Mathematica come input standard. Il comando sed elimina le righe vuote prodotte dal kernel.
Questo hack non è versatile come MASH . Poiché il codice Mathematica viene letto da stdin non è possibile utilizzare stdin per l'input dell'utente, ovvero le funzioni Input e InputString non funziona.
Provare
-initfile filename
E mettere il comando exit, in programma
Supponendo di aggiungere i binari Mathematica alla variabile d'ambiente PATH in ~ / .profile,
export PATH=$PATH:/Applications/Mathematica.app/Contents/MacOS
Quindi scrivi questa riga shebang negli script di Mathematica.
#!/usr/bin/env MathKernel -script
Ora puoi tagliare a punti i tuoi script.
$ cat hello.ma
#!/usr/bin/env MathKernel -script
Print["Hello World!"]
$ chmod a+x hello.ma
$ ./hello.ma
"Hello World!"
Testato con Mathematica 8.0.
Bug minore: Mathematica circonda Print [s] con virgolette in Windows e Mac OS X, ma non Linux. WTF?
Ho trovato un'altra soluzione che ha funzionato per me.
Salva il codice in un file .m, quindi eseguilo in questo modo: MathKernel -noprompt -run & # 8220; <
Questo è il link: http: //bergmanlab.smith. man.ac.uk/?p=38
Per matematica 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
Utilizzo:
$ chmod +x test.m
$ ./test.m
"Hello World!"
7
35