#-*- coding: utf-8 -*-
import os,sys
import winpexpect
#由于直接用wolframscript -code无法保存输出图像,所以采用winpexpect来进行交互式操作,相当于执行了exe文件,在其命令行操作
#这样才能正确保存图像,并且在命令行环境中更易于编辑mma代码。
if __name__ == '__main__':
os.chdir(r"D:\Wolfram Research\Mathematica\11.3")
#命令行操作脚本wolframscript.exe,从mma 11.0之后便存在,位置如上
child = winpexpect.winspawn('wolframscript.exe')
# child.logfile = sys.stdout #控制台输出全过程
# python代码中变量与mma执行结果的交互
arg = 7
child.expect (':=') #mma所有输入都是In[数字]:=,所以匹配:=即可用sendline(带换行符)进行输入
#这里提交你的mma代码即可
child.sendline('Prime['+str(arg)+']')
child.expect(']= ') #mma所有输出都是Out[数字]=,所以匹配"]= "即可用child.buffer获取输出结果,mma输出自带一个空格,
#所以这里把空格跟上,避免后续处理空格问题
# expect后得到的expect.buffer就是命令和执行结果
print("Prime["+str(arg)+"]=",child.buffer)
print("c"+child.buffer)
child.expect (':=')
child.sendline('Prime['+str(arg*2)+']')
child.expect(']= ')
print("Prime["+str(arg*2)+"]=",child.buffer)
#退出wolframscript
child.expect(':=')
child.sendline('Quit')
child.expect(winpexpect.EOF)
首先你得安装mma并且熟悉mma的语法,使用mma可以方便超复杂的计算。例如求公共最长子序列,python可能需要至少十几行代码,mma直接使用某个成熟函数即可得出。