【问题标题】:Running a MATLAB script from Notepad++从 Notepad++ 运行 MATLAB 脚本
【发布时间】:2014-07-22 11:14:58
【问题描述】:

有没有办法从 Notepad++ 运行 MATLAB 脚本?

显然我的电脑上安装了 MATLAB。我知道你可以设置一个路径,让 Notepad++ 在你按下 F5 时运行,但是当我将此路径设置为我的 MATLAB.exe 文件时,它只会打开另一个 MATLAB 实例。

这不是我想要的,我希望 Notepad++ 中的实际脚本在已经打开并正在运行的 MATLAB 实例中执行。

【问题讨论】:

  • 我曾经有一个similar question 有更多的想法作为答案。但是山姆在这里建议的是我真正想要的。因此,如果它有效,那就完美了。

标签: matlab notepad++


【解决方案1】:

恐怕我目前不在家里的电脑上进行测试,所以以下只是一个建议供您尝试。

如果您查看 Notepad++ 的 NppExec 插件,您会发现使用它可以指定在按 F6 时运行的命令(就像在常规 Notepad++ 中按 F5 的增强版本)。你也可以给它变量,比如当前文件的路径,当前文件的名字。

MATLAB(至少在 Windows 上 - 我假设您在 Windows 上)通过 ActiveX/COM 提供 API。如果您在 MATLAB 文档中搜索详细信息,它位于 External Interfaces -> MATLAB COM Automation Server 下。通过(在 MATLAB 中)运行命令 enableservice('AutomationServer'),您将设置正在运行的 MATLAB 实例以通过此 API 接收指令。

您应该能够编写一个小脚本(可能在 VBScript 或类似的东西中),将 Notepad++ 中当前文件的路径和文件名作为输入参数,然后通过 COM 连接到正在运行的 MATLAB 实例API 并执行文件的内容。

将此脚本设置为在您按 F6 时在 NppExec 中执行,然后它应该在打开的 MATLAB 实例中运行当前文件。

正如我所说,以上只是推测,因为我现在无法对其进行测试,但我认为它应该可以工作。祝你好运!

【讨论】:

  • PS 我会在回家后尝试一下,如果可行,请编辑帖子。如果您设法先到达那里,请添加关于您的成功/失败的评论。
  • 谢谢山姆。尽管我确实理解您的意思,但用 VB 或任何其他语言编写脚本来做到这一点似乎有点超出我的能力。如果你能告诉我如何做这样的事情,我将不胜感激!
  • 这确实可行(尽管您之前的评论中提到的编辑从未进行过)?所有 MATLAB 文档似乎都专注于使用 C# 中的 MATLAB,这有点超出了我目前的编程愿望。
【解决方案2】:

使用 NppExec 插件并按 F6,复制粘贴以下内容并保存脚本:

NPP_SAVE
set local MATPATH=C:\Program Files\MATLAB\R2015a\bin\matlab.exe

cd "$(CURRENT_DIRECTORY)"

"$(MATPATH)" -nodisplay -nosplash -nodesktop -r "try, run('$(FILE_NAME)'), 
 catch me, fprintf('%s / %s\n',me.identifier,me.message), end"

然后运行(按 F6;回车)。 Matlab 控制台和绘图窗口仍然打开并保持打开状态。在打开 Matlab 命令窗口时将显示错误消息。添加

, exit"

到最后一个命令将使其退出并再次关闭。如果您想使用 crontabs 等运行自动化应用程序,请查看 Matlab 外部接口参考以实现自动化。

matlab.exe -automation ...

在 cmd 终端也可以,但是路径需要自己填写。

【讨论】:

    【解决方案3】:

    这是基于 Sam 的想法的可用实现。首先,像这样在自动化模式下执行 MATLAB。

    matlab.exe -automation
    

    接下来,在 NppExec 插件中编译并执行以下 VB。 (即使用MATLAB自动化API)

    'open_matlab.vb
    Imports System
    Module open_matlab
        ' connect to a opened matlab session
        Sub Main()
            Dim h As Object
            Dim res As String
            Dim matcmd As String
    
            h = GetObject(, "Matlab.Application")
            Console.WriteLine("MATLAB & Notepad++")
            Console.WriteLine(" ")
            'mainLoop
            while True
                Console.Write(">> ")
                matcmd = Console.ReadLine()
                ' How you exit this app
                if matcmd.Equals("!!") then
                    Exit while
                End if
                res=h.Execute(matcmd)
                Console.WriteLine(res)
            End while
        End Sub
    End Module
    

    然后,您将在编辑器下方获得一个类似 matlab 的终端。然后,您可以在上面编写代码并在下面执行。输入!! 退出终端。 What it looks like

    提示:不要使用ctrl+c 来中断 MATLAB 命令,因为它会杀死整个进程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-19
      • 2011-01-24
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      • 2019-11-11
      • 1970-01-01
      相关资源
      最近更新 更多