首页 > 解决方案 > 如何在 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 命令,而无需手动将其输入命令行?

标签: matlabshellcommand-linecommandconda

解决方案


不使用!命令或system(). 这些是“一劳永逸”的功能。

但是您可以在 Matlab 中使用 Java 的java.lang.ProcessAPI来控制正在进行的过程并与之交互。

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


推荐阅读