如何从 java 打开 matlab 会话并执行 matlab 脚本
Posted
技术标签:
【中文标题】如何从 java 打开 matlab 会话并执行 matlab 脚本【英文标题】:How to open a matlab session from java and execute matlab scripts 【发布时间】:2011-11-13 10:54:28 【问题描述】:我有一个 matlab 脚本,它接受一个输入 mat 文件并生成一个输出文件。 目前我有一个能够执行这个脚本的 shell 脚本。
我正在使用 ProcessBuilder
类从 Java 执行此脚本,并且一切正常。
我需要经常从 java 执行 matlab 脚本执行,每次执行脚本时都会创建 mcr 进程,执行脚本并终止 mcr。
我喜欢打开 MCR 进程并打开一个面向 java 的 matlab 会话,这样同一个进程就可以保持活动状态,这样我就可以在同一个会话中多次执行脚本。
我发现 matlabcontrol 似乎适合这个。
如何使用 MCR 位置和 LD_LIBRARY_PATH 配置 MatlabProxyFactory
我在我的 shell 脚本中设置哪个并在同一个会话中执行我的脚本?
我还遇到了一个工具 MATLAB JA Builder,但我目前无法使用它,因为它不是免费的。
谢谢!
【问题讨论】:
查看我对类似问题的回答:How to call a user defined Matlab function(M file) from java(Eclipse) using matlabcontrol.jar 谢谢 Amro,我会测试一下。但是有一个问题 - matlab 控件如何知道 matlab 运行时主页来调用它?我已经进行了默认的 mcr 安装,但 matlab 不在系统类路径上。 这里要明确一点,matlabcontrol 需要实时安装 MATLAB,并且不能仅与 MATLAB Compiler Runtime (MCR) 一起使用。也就是说,如果您有非默认 MATLAB 安装位置,则需要明确指定该信息。有关更多信息,请参阅matlabcontrol.MatlabProxyFactoryOptions.Builder 的文档 非常感谢您的回复。我只有 MCR 而不是 Matlab..有没有 java 库来实现类似的事情? 如果您有权访问 MATLAB Builder JA,则可以从您的 MATLAB 脚本构建一个 java 库(而不是我假设您目前拥有的可执行文件)。它会在开始时公开要调用一次的初始化方法,然后您可以根据需要多次调用计算方法(无需多次创建/拆除 MCR 会话的开销)。请查阅文档各自的产品 【参考方案1】:如果您使用matlabcontrol
,我认为您不需要shell 脚本,只需告诉它您要运行的m 文件的名称即可。如果您想将 shell 脚本与ProcessBuilder
结合使用,您必须启动该进程一次并保留对其输入流的引用。当您想要执行命令时,您将其写入该流。此外,您必须保持线程处于活动状态以清空 Matlab 的输出和错误流,否则它们将被填满并且 Matlab 将挂起。如果你想这样做,我建议查看this 项目的源代码(我是该项目的贡献者)。您感兴趣的课程是 RCaller。它的作用或多或少相同,只是它调用的是 R 而不是 matlab。
【讨论】:
以上是关于如何从 java 打开 matlab 会话并执行 matlab 脚本的主要内容,如果未能解决你的问题,请参考以下文章
您如何从屏幕会话中编写 gnu screen 脚本以打开新窗口并在其中运行命令?