Mathematica в пакетном режиме из командной строки на Mac OS X - PullRequest
6 голосов
/ 22 октября 2009

Я бы хотел начать писать модульные тесты для моих программ Mathematica и управлять всем из командной строки с помощью некоторых Makefile.

Похоже, что Mathematica можно запустить из командной строки , но я не вижу каких-либо основных инструкций по началу работы с этим в Mac OS X - кто-нибудь делал это раньше?


Обновление:

Создание тестового файла следующим образом:

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

И запустить его с

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

- самое близкое, что я могу получить к какой-то пакетной обработке. Вывод выглядит ужасно, хотя; Новые строки добавляются для каждой строки скрипта!


"hello"




"y=2"

"z=3"

Это самая близкая вещь, которую я могу получить к сценарию, который все еще может выводить информацию на вывод консоли? Я использую только Mathematica 6, но надеюсь, что это ничего не изменит.

Ответы [ 3 ]

3 голосов
/ 22 октября 2009

Это, наконец, дает вывод, как я ожидал:

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

Имеет смысл, я полагаю. Добавление этого к моему .bash_profile позволяет легко выполнить (как в mma test.m):

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

См. Также скрипт dreeves mash Perl, который может предложить преимущества по сравнению с этим подходом.

2 голосов
/ 22 октября 2009

Проведя некоторые эксперименты, я обнаружил, что /Applications/Mathematica.app/Contents/MacOS/MathKernel можно запустить из командной строки. Похоже, что он не принимает обычные -h или --help флаги командной строки.

0 голосов
/ 17 апреля 2010

Спасибо Пилли и Уиллу Робертсону за пробку MASH! Вот соответствующий вопрос StackOverflow: Вызовите программу Mathematica из командной строки с аргументами командной строки, stdin, stdout и stderr

Если вы не используете MASH, вы можете использовать следующие служебные функции, которые определяет MASH. Например, стандартный Print будет печатать строки с кавычками - обычно это не то, что вам нужно в скриптах.

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

Чтобы использовать MASH, просто возьмите этот файл perl, mash.pl , а затем сделайте свой test.m следующим образом:

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

prn["hello"];
x := 1;
y = x+1;
z = y+1;
prn["y=", y];
prn["z=", z];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...