Domanda

Vorrei iniziare a scrivere alcuni unit test per i miei programmi Mathematica e controllare tutto dalla riga di comando con alcuni Makefile.

Sembra che Mathematica possa essere eseguito dalla riga di comando ma posso vedi le istruzioni di base per iniziare a farlo su Mac OS X & # 8212; qualcuno l'ha mai fatto prima?


Aggiornamento:

Creazione di un file di test come questo:

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

E eseguendolo con

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

è il più vicino possibile a una sorta di elaborazione batch. L'output sembra brutto, però; vengono aggiunte nuove righe per ogni riga dello script!

"hello"




"y=2"

"z=3"

È questa la cosa più vicina a uno script che può ancora generare informazioni sull'output della console? Sto solo usando Mathematica 6, ma spero che non faccia alcuna differenza.

È stato utile?

Soluzione

Questo, infine, fornisce un output come mi aspetterei:

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

Suppongo che abbia senso. Aggiungendo questo al mio .bash_profile è possibile eseguire facilmente (come in mma test.m ):

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

Vedi anche lo script Perl mash di dreeves, che può offrire vantaggi rispetto a questo approccio.

Altri suggerimenti

Con alcuni esperimenti, ho scoperto che /Applications/Mathematica.app/Contents/MacOS/MathKernel può essere lanciato dalla riga di comando. Tuttavia, non sembra accettare i soliti flag della riga di comando -h o --help .

Grazie a Pillsy e Will Robertson per la presa MASH! Ecco la domanda StackOverflow pertinente: Chiama un programma Mathematica dalla riga di comando, con args della riga di comando, stdin , stdout e stderr

Se non si utilizza MASH, è possibile utilizzare le seguenti funzioni di utilità definite da MASH. Ad esempio, la stampa standard stamperà le stringhe con virgolette, di solito non quello che vuoi negli script.

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

Per usare MASH, basta prendere quel file perl, mash.pl , quindi rendi il tuo test.m simile al seguente:

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

prn["hello"];
x := 1;
y = x+1;
z = y+1;
prn["y=", y];
prn["z=", z];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top