Вызов программы Mathematica из командной строки с использованием аргументов командной строки, stdin, stdout и stderr.

StackOverflow https://stackoverflow.com/questions/148057

Вопрос

Если у вас есть код 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 и т. д.)?

Это было полезно?

Решение

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

Начиная с версии Mathematica 6, достаточно следующего сценария 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/

Другие советы

Вот решение, которое не требует дополнительного вспомогательного сценария.Вы можете использовать следующую команду для прямого вызова ядра 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 в качестве стандартного ввода.А СЭД Команда удаляет пустые строки, созданные ядром.

Этот хак не такой универсальный, как МАШ.Поскольку код Mathematica считывается из стандартный ввод ты не можешь использовать стандартный ввод для пользовательского ввода, т. е. функции Вход и Строка ввода не работает.

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

Предполагая, что вы добавляете двоичные файлы 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.Что за черт?

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

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

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

Для математики 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top