Question

J'aimerais commencer à écrire des tests unitaires pour mes programmes Mathematica et tout contrôler à partir de la ligne de commande à l'aide de fichiers Makefiles.

Il semble que puisse être exécuté à partir de la ligne de commande , mais que je peux l'exécuter. ne voyez aucune instruction de base pour commencer à utiliser Mac OS X. Est-ce que quelqu'un l'a déjà fait?

Mise à jour:

Création d'un fichier de test comme celui-ci:

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

Et l'exécuter avec

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

est ce qui me rapproche le plus du traitement par lots. La sortie semble moche, cependant; Des nouvelles lignes sont ajoutées pour chaque ligne du script!

"hello"




"y=2"

"z=3"

Est-ce la chose la plus proche que je puisse obtenir d'un script qui peut toujours afficher des informations sur la sortie de la console? J'utilise seulement Mathematica 6, mais j'espère que cela ne fera aucune différence.

Était-ce utile?

La solution

Ceci, enfin, donne la sortie comme je l’attendais:

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

Ça a du sens, je suppose. Ajouter ceci à mon .bash_profile permet une exécution facile (comme dans mma test.m ):

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

Voir aussi Le mash de dreeves qui offre des avantages par rapport à cette approche.

Autres conseils

Avec quelques expériences, j'ai trouvé que /Applications/Mathematica.app/Contents/MacOS/MathKernel peut être lancé à partir de la ligne de commande. Il ne semble pas accepter les indicateurs de ligne de commande -h ou - help habituels, bien que.

Merci à Pillsy et Will Robertson pour la prise MASH! Voici la question pertinente de StackOverflow: Appelez un programme Mathematica à partir de la ligne de commande, avec les arguments de ligne de commande, stdin , stdout et stderr

Si vous n'utilisez pas MASH, vous souhaiterez peut-être utiliser les fonctions utilitaires suivantes définies par MASH. Par exemple, l’impression standard imprimera des chaînes avec des guillemets - ce n’est pas ce que vous voulez dans les scripts.

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

Pour utiliser MASH, saisissez simplement ce fichier Perl, mash.pl , puis configurez votre test.m comme suit:

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

prn["hello"];
x := 1;
y = x+1;
z = y+1;
prn["y=", y];
prn["z=", z];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top