Chiamare un Mathematica programma da riga di comando, con la riga di comando argomenti, stdin, stdout e stderr

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

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)?

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top