Вызовите программу Mathematica из командной строки, используя аргументы командной строки, stdin, stdout и stderr - PullRequest
17 голосов
/ 29 сентября 2008

Если у вас есть код Mathematica в foo.m, Mathematica может быть вызвана с помощью -noprompt и с -initfile foo.m (или -run "<<foo.m") и аргументы командной строки доступны в $CommandLine (с дополнительным мусором там), но есть ли способ просто иметь некоторый математический код, например

#!/usr/bin/env MathKernel
x = 2+2;
Print[x];
Print["There were ", Length[ARGV], " args passed in on the command line."];
linesFromStdin = readList[];
etc.

а chmod это исполняемый файл и запустить его? Другими словами, как использовать Mathematica как любой другой язык сценариев (Perl, Python, Ruby и т. Д.)?

Ответы [ 6 ]

10 голосов
/ 30 сентября 2008

MASH - Mathematica Scripting Hack - сделает это.

Начиная с версии 6 Mathematica, достаточно следующего сценария perl:

http://ai.eecs.umich.edu/people/dreeves/mash/mash.pl

Для предыдущих версий Mathematica требуется программа на C:

http://ai.eecs.umich.edu/people/dreeves/mash/pre6

ОБНОВЛЕНИЕ: В конце концов, Mathematica 8 поддерживает это изначально с параметром командной строки "-script":

http://www.wolfram.com/mathematica/new-in-8/mathematica-shell-scripts/

5 голосов
/ 14 августа 2010

Вот решение, которое не требует дополнительного вспомогательного скрипта. Вы можете использовать следующий shebang для прямого вызова ядра 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];

Код shebang пропускает первые две строки скрипта и передает остальное ядру Mathematica в качестве стандартного ввода. Команда sed удаляет пустые строки, созданные ядром.

Этот хак не так универсален, как MASH . Поскольку код Mathematica читается из stdin , вы не можете использовать stdin для пользовательского ввода, т.е. функции Input и InputString не работают .

4 голосов
/ 02 ноября 2011

Если вы добавите двоичные файлы Mathematica в переменную окружения PATH в ~ / .profile,

export PATH=$PATH:/Applications/Mathematica.app/Contents/MacOS

Тогда вы просто напишите эту строку в своих сценариях Mathematica.

#!/usr/bin/env MathKernel -script

Теперь вы можете разбивать свои сценарии на точки.

$ cat hello.ma
#!/usr/bin/env MathKernel -script

Print["Hello World!"]

$ chmod a+x hello.ma
$ ./hello.ma
"Hello World!"

Протестировано с Mathematica 8.0.

Незначительная ошибка: Mathematica окружает Print [s] кавычками в Windows и Mac OS X, но не в Linux. WTF?

4 голосов
/ 29 сентября 2008

Попробуйте
-initfile имя файла
И введите команду выхода в вашу программу

2 голосов
/ 24 июня 2012

Я нашел другое решение, которое сработало для меня.

Сохраните код в файле .m, затем запустите его так: MathKernel -noprompt -run «<

Это ссылка: http://bergmanlab.smith.man.ac.uk/?p=38

1 голос
/ 16 февраля 2013

Для математики 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

Использование:

$ chmod +x test.m

$ ./test.m
"Hello World!"

7
35
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...