matlab - 如何在 MATLAB 中以编程方式将命令发送到命令窗口?
问题描述
在 matlab 中,我可以通过 bang (!) Notation 更改为另一个 shell。
示例: 我通过以下命令在 MATLAB 中输入 conda 环境:
!cmd '"%windir%\System32\cmd.exe" /K ""C:\Program Files\Anaconda3\Scripts\activate_<conda-env-name>.bat" "C:\Program Files\Anaconda3""'
我的 MATLAB 命令窗口然后显示以下内容:
(<conda-env-name>) U:\some_starting_path>
现在,有没有办法以编程方式向这个新输入的 shell 发送命令,以便以那个 shell 的语法而不是 MATLAB 命令来评估该命令? 例如,我如何编写代码来执行 Python 命令,而无需手动将其输入命令行?
解决方案
不使用!
命令或system()
. 这些是“一劳永逸”的功能。
但是您可以在 Matlab 中使用 Java 的java.lang.Process
API来控制正在进行的过程并与之交互。
function control_another_process
pb = java.lang.ProcessBuilder(["myCommand", "myArg1", "myArg2"]);
proc = pb.start; % now proc is a java.lang.Process object
stdin = proc.getOutputStream; % Here's how you send commands to the process
stdout = proc.getInputStream; % And here's how you get its output
stderr = proc.getErrorStream;
% ... now do stuff with the process ...
end
您可以将它与 shell、withpython
或任何其他命令一起使用。
这是一个封装了 Java 代码的 Matlab 类,以便在 Matlab 中使用:https ://github.com/apjanke/janklab/blob/master/Mcode/classes/%2Bjl/%2Butil/Process.m