【问题标题】:How to send commands to command window programmatically in MATLAB?如何在 MATLAB 中以编程方式将命令发送到命令窗口?
【发布时间】:2020-04-10 03:06:20
【问题描述】:

在 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 命令而不需要手动将其输入命令行?

【问题讨论】:

  • 只是为了澄清:当您将! 添加到任何命令行窗口行时,您基本上是在告诉 MATLAB 运行 系统命令行 中接下来出现的任何内容。所以它们不是有效的 MATLAB 行,它们是有效的 OS 行。
  • This 可能有用

标签: matlab shell command-line command conda


【解决方案1】:

不使用! 命令或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、python 或任何其他命令一起使用。

这是一个封装了 Java 代码以方便在 Matlab 中使用的 Matlab 类:https://github.com/apjanke/janklab/blob/master/Mcode/classes/%2Bjl/%2Butil/Process.m

【讨论】:

    猜你喜欢
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 2010-12-16
    • 2011-04-01
    • 1970-01-01
    相关资源
    最近更新 更多