当前位置:  开发笔记 > 编程语言 > 正文

从命令行调用Mathematica程序,使用命令行args,stdin,stdout和stderr

如何解决《从命令行调用Mathematica程序,使用命令行args,stdin,stdout和stderr》经验,为你挑选了2个好方法。

如果在foo.m中有Mathematica代码,Mathematica可以用-noprompt-initfile foo.m (或-run "<)调用,并且命令行参数可用$CommandLine(在那里有额外的垃圾)但是有没有办法让一些mathematica代码像

#!/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它可执行并运行它?换句话说,如何像任何其他脚本语言(Perl,Python,Ruby等)一样使用Mathematica?



1> dreeves..:

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/



2> sakra..:

这是一个不需要额外帮助程序脚本的解决方案.您可以使用以下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那样多才多艺.因为从stdin读取Mathematica代码,所以不能将stdin用于用户输入,即函数Input和InputString不起作用.

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有