如何在tcl中从外部程序发送和接收数据?我试试这个:
set d exec maxima --batch-string='5+10;'
puts d;
但它不起作用。我需要从tcl调用Maxima(http://maxima.sourceforge.net/index.html)并返回tcl maxima结果。官方文档是空的或非常老,示例不起作用。
答案 0 :(得分:2)
我猜你最好打电话给这样的话:
malloc
为了清楚起见,我已将批处理字符串拆分为自己的变量,请注意单引号实际上对Tcl没有任何意义;他们是一个贝壳主义者。 Tcl使用不同的语法。
答案 1 :(得分:1)
我已经编写了函数maxima_call
来轻松调用Maxima。您需要在maxima_path
变量中设置自己的Maxima程序路径。在Linux上,它可以是set maxima_path maxima
proc maxima_call {expression} {
set maxima_path "M:\\Programs\\maxima-5.40.0\\bin\\maxima.bat"
set keys ""
# set keys "display2d:false\$"
set result [split [exec ${maxima_path} --batch-string=${keys}${expression}\;] \n]
set result [lreplace $result 0 4]
return [join $result \n]
}
puts [maxima_call "5+10"]
但是我不清楚你是怎么解析计算结果的。例如,我从Maxima获得了这个输出。
set expression "\[aa : 1, bb : 2, cc : 3\]; (aa + bb + cc)/(dd + ee)"
puts [maxima_call $expression]
>
(%i1) [aa:1,bb:2,cc:3]
(%o1) [1, 2, 3]
(%i2) (aa+bb+cc)/(dd+ee)
6
(%o2) -------
ee + dd