2009-10-22 4 views
6

Chciałbym rozpocząć pisanie testów jednostkowych dla moich programów Mathematica i kontrolować wszystko z poziomu wiersza poleceń z kilkoma Makefile.Mathematica w trybie wsadowym z wiersza poleceń na Mac OS X

Wygląda jak Mathematica can be run from the command line, ale nie widzę żadnych podstawowych instrukcji dotyczących rozpoczęcia pracy z systemem Mac OS X - czy ktoś wcześniej to zrobił?


Aktualizacja:

Tworzenie pliku testowego takiego:

 
Print["hello"]; 
x := 1; 
y = x+1; 
z = y+1; 
Print["y="[email protected]]; 
Print["z="[email protected]]; 
Quit[]; 

i uruchomienie go z

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

jest najbliżej mogę dostać się do jakiegoś przetwarzanie wsadowe. Wynik wygląda jednak paskudnie; nowe linie są dodawane dla każdej linii skryptu!

 

"hello" 




"y=2" 

"z=3" 

Czy to jest najbliższa rzecz, którą mogę dostać do skryptu, który nadal może wysyłać informacje do wyjścia konsoli? Używam tylko Mathematica 6, ale mam nadzieję, że to nie ma znaczenia.

+0

Szukały na zacieru: http: //ai.eecs. umich.edu/people/dreeves/mash/? – Pillsy

Odpowiedz

3

To wreszcie daje wyjście jak będę oczekiwać go:

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

ma sens, jak sądzę. Dodanie tego do mojego .bash_profile umożliwia łatwe wykonanie (jak w mma test.m):

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

Zobacz także dreeves's mash Perl skrypt, który może zaoferować korzyści w porównaniu z tym podejściem.

2

Z niektórymi eksperymentami odkryłem, że /Applications/Mathematica.app/Contents/MacOS/MathKernel można uruchomić z wiersza poleceń. Wydaje się jednak, że nie akceptuje on zwykłych flag linii poleceń.

0

Dzięki Pillsy i Willowi Robertsonowi za wtyczkę MASH! Oto odpowiednie pytanie dotyczące StackOverflow: Call a Mathematica program from the command line, with command-line args, stdin, stdout, and stderr

Jeśli nie używasz MASH, możesz chcieć użyć następujących funkcji narzędziowych, które definiuje MASH. Na przykład standardowy wydruk będzie drukował ciągi w cudzysłowach - zazwyczaj nie jest to, co chcesz w skryptach.

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[] *) 
    [email protected][f[]&, f[], test];  (* returns while test is true. *) 
readList[] := doList[read, #=!=EOF&];  (* Slurp list'o'lines from stdin *) 

Aby korzystać Mash, po prostu chwyć ten plik Perl, mash.pl, a następnie dokonać test.m tak:

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

prn["hello"]; 
x := 1; 
y = x+1; 
z = y+1; 
prn["y=", y]; 
prn["z=", z];