Пакетный ввод и вывод в Mathematica?

Недавно я нашел старый пост на MathGroup, где показано использование недокументированных параметров командной строки -batchinput и -batchoutput:

 If test.mma contains the following commands:

    a=2+2
    b=10!;
    a+b

 then, running Mathematica in batch mode, only output for the first and 
 third commands goes to stdout:

    # math -batchinput -batchoutput < test.mma

    4

    3628804

Но при попытке воспроизвести это поведение под Windows я получаю только первый вывод, напечатанный в окне консоли. Что я делаю неправильно?


person Alexey Popkov    schedule 01.07.2011    source источник
comment
Возможно, вам пригодится опция -script (новая в 8). Однако это не одно и то же, Out= строк не будут напечатаны.   -  person Szabolcs    schedule 01.07.2011
comment
@Szabolcs Пожалуйста, приведите пример использования этой опции (или ссылку на нее). Этикетки Out= не печатаются с параметром -batchoutput. В чем разница между ним и -script?   -  person Alexey Popkov    schedule 01.07.2011
comment
@Алексей, у тебя 8 версия? С -script вообще ничего не печатается, если только ваша программа не делает какой-либо явный вывод (например, использует Print). См. дополнительную информацию: reference.wolfram.com/mathematica/ref/program/ MathKernel.html Просто запустите math -script file.m, чтобы выполнить команды из file.m в виде скрипта.   -  person Szabolcs    schedule 01.07.2011
comment
@Szabolcs У меня до сих пор нет версии 8, но мне интересно понять ее новую функциональность. Итак, Print в режиме сценария будет печатать на консоль, хотя в режиме сценария стандартный ввод и вывод не перенаправляются, как сказано на странице документации?   -  person Alexey Popkov    schedule 01.07.2011
comment
@Aleksey, на практике кажется, что печатается только то, что вы печатаете явно из своей программы. Как и любой простой язык сценариев. Теперь вы можете писать небольшие программы на Mma и запускать их неинтерактивно, без интерфейса и отвлекающего вывода. $Post и друзья, похоже, не используются в режиме сценария, поэтому вы не можете взломать его простым способом, чтобы распечатать весь вывод, если это то, что вам нужно. Я думаю, что читал о бесплатных сторонних интерфейсах, которые в основном выполняют то же самое для более ранних версий, но я действительно не помню...   -  person Szabolcs    schedule 01.07.2011


Ответы (1)


Я проверил это и получил оба числа в качестве вывода. ОДНАКО, если за последней командой не следует возврат каретки, вывод будет именно таким, какой вы разместили!

Итак, убедитесь, что вы заканчиваете последнюю строку символом возврата каретки.

person Dr. belisarius    schedule 01.07.2011
comment
Спасибо! Проблема заключалась в том, что последняя строка не заканчивалась символом новой строки. - person Alexey Popkov; 01.07.2011
comment
@Alexey Возможно, carriage return больше не вернется cbc.ca/news/world/story/2011/04/26/ - person Dr. belisarius; 01.07.2011
comment
На самом деле новой строки после последней строки недостаточно. Большинство редакторов вставляют эту новую строку после последней строки, даже если они ее не показывают. Вам нужна целая лишняя пустая строка в конце, чтобы это работало. - person Szabolcs; 01.07.2011
comment
@Szabolcs Не на моей машине :) - person Dr. belisarius; 01.07.2011