贡献者: graviton
Mathematica 有个命令行解释程序 wolframscript,可以用来运行用 Wolfram 语言编写的脚本。
可以使用 bash 命令查看:
file -L $(which wolframscript)
wolframscript --help #查看使用帮助
wolframscript --help 的输出如下:
-v,-verbose:在执行过程中打印附加信息。
-h,-help:打印帮助文本。
-version:打印 WolframScript 的版本。
-c,-code WL:给出要执行的 Wolfram Language 代码。
-f,-file PATH:给出要执行的包含 Wolfram 语言代码的文件。
-a,-api URL|UUID:使用指定 URL 的 API,或来自指定 UUID 的云或本地对象。
在 -args 之后,以 key=value 的形式提供参数。
-fun,-function WL:使用函数,参数为使用 -args 给出的 字符串。
并将参数解析为 -signature 给出的类型。
--,-args ARGS。。。:与 -api 或 -function 一起使用,以提供参数。
-s,-signature TYPE。。。:与 -function 和 -args 一起使用,为提供的参数指定解释器类型。
-charset ENCODING:使用 ENCODING 进行输出。编码可以是 None,用于输出原始字节,
或是 $CharacterEncodings 中的任何条目,除了 Unicode。默认情况继承终端的 语言设置 中的值。
-format TYPE:指定输出的格式。可以使用 Export 所理解的任何格式。
-print [all]:当运行 脚本 时,打印脚本 最后一行 的结果。如果给了 all 参数,则打印 每一行。
-linewise:执行读取到的 标准输入 中的每行代码。
-script ARGS。。。:与 wolfram -script 相对应,作用是设置 $ScriptCommandLine。
建立后缀名为 .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:字符串列表,给出运行 WolframKernel 使用的 完整命令行。
$ScriptCommandLine:为 正运行的脚本 准备的 命令行参数列表。
这些参数出现在 -option 给出的选项之后。
$ScriptInputString:代表在 标准输入 通道 上对 原始操作系统命令 的输入,
正运行的 Wolfram Language 实例即来自 此命令的调用(invoke)
。脚本迭代一次,-linewise 选项就把 标准输入 的一行载入该变量。
可在交互式脚本中使用。
在上面的例子中,三个变量被填充如下,不同平台可能稍有不同
$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 还可以加上 Shebang 行。即在脚本文件首行添加
#!/usr/bin/env wolframscript [其他选项]
运行的时候,不需要先输入 wolframscript,传递参数的方法和上面相同。
./test.wl para1 para2
# 或者
wolframscript -script ./init.wl &>\
~/test/log.txt & # 在后台运行,把输出重定向到日志文件 log.txt
下面是一些经常用到的 MMA 系统变量:
guide/SystemInformation : MMA 系统信息
guide/WolframSystemSetup: 更一般的系统设置
$InputFileName: 脚本的绝对路径。
$Notebooks: 如果是用前端运行的,则为 True。
$BatchInput: 输入是否来自批处理
$BatchOutput: 如果在命令行中输出,则为 True。
$CommandLine: 唤醒环境变量所使用的命令行,
$ProcessID: 进程 ID
$ParentProcessID:
$Username: 用户的登陆名
Environment["var"]: 操作系统的环境变量,如 Environment["HOME"]
 
 
 
 
 
 
 
 
 
 
 
友情链接: 超理论坛 | ©小时科技 保留一切权利