Mathematica 脚本模式

                     

贡献者: graviton

  • 本文处于草稿阶段。
  • 本文存在未完成的内容。

1. 命令行二进制程序

   Mathematica 有个命令行解释程序 wolframscript,可以用来运行用 Wolfram 语言编写的脚本。 可以使用 bash 命令查看:

file -L $(which wolframscript)
wolframscript --help #查看使用帮助

2. 命令行选项

   wolframscript --help 的输出如下:

辅助功能

运行模式

运行选项

3. Wolfram 内部预定义变量

常用调用方式

   建立后缀名为 .wl or .wls 的文件,然后按平常写 Mathematica 笔记本的语法编写脚本。 但最好用 字符串函数 代替 Box 相关的函数,如 TableForm。 运行时,用 wolframscript 唤起脚本(如 windows 为 wolframscript.exe)。

   假如当前目录下有脚本 test.wl,用类似下面的方式运行:

wolframscript -script test.wl \
--Lbd-num '0.90' --Lbd-fit '0.90'  --ord '\$ord0'

   其中 --Lbd-num '0.90' --Lbd-fit '0.90' --ord '\$ord0' 将作为参数提供给脚本 test.wl,可在脚本内部使用。 注意 $ScriptCommandLine 中的参数,其类型均为 String。 也就是命令行接收到的 参数,会被强制转码为 字符串。 所以上面收到的参数列表为:

{"./test.wl","--Lbd-num","0.90","--Lbd-fit","0.90","--ord","$ord0"}
如果需要使用 数字 或其他类型的 ,需要在脚本内部自行转换(ToExpression)。

   此外,如果命令行参数中包含 $,需要用 单引号 + 反斜杠 转义(escape)。 例如 $ord -> '\$ord0'

   在 WolframScript 开始执行时,会预定义一些变量。 因此在脚本内部,可以从这些 预设变量 读取 shell 中提供的参数。

   在上面的例子中,三个变量被填充如下,不同平台可能稍有不同

$CommandLine->{/usr/local/Wolfram/Mathematica/12.2/
SystemFiles/Kernel/Binaries/Linux-x86-64/WolframKernel,
-wlbanner,-script,test.wl,--,test.wl,
--Lbd-num,0.90,--Lbd-fit,0.90,--ord,$ord0}

$ScriptCommandLine->{test.wl,--Lbd-num,0.90,--Lbd-fit,0.90,--ord,ord0}

$ScriptInputString->None

   也可用 wolfram 命令运行脚本,但是 wolfram 不会设置 $ScriptCommandLine,只会填充 $CommandLine:

wolfram -script test.wl  --Lbd-num '0.90' --Lbd-fit '0.90'  --ord '\$ord0'

Unix 平台

   Unix 还可以加上 Shebang 行。即在脚本文件首行添加

#!/usr/bin/env wolframscript [其他选项]

   运行的时候,不需要先输入 wolframscript,传递参数的方法和上面相同。

./test.wl para1 para2
# 或者
wolframscript -script ./init.wl &>\
~/test/log.txt & # 在后台运行,把输出重定向到日志文件 log.txt

   下面是一些经常用到的 MMA 系统变量:

                     

© 小时科技 保留一切权利