【问题标题】:Run Matlab in Linux without graphical environment?在没有图形环境的 Linux 中运行 Matlab?
【发布时间】:2012-06-15 07:36:23
【问题描述】:

我将使用 SSH 在远程 Linux 服务器上运行 Matlab 程序。 我想知道如何在Linux中只用命令行运行Matlab,也就是说没有图形环境?

谢谢。

【问题讨论】:

    标签: linux matlab command-line ssh


    【解决方案1】:
    matlab -nodisplay
    

    here about -nodisplay

    那么-nodesktop-nosplash 是不必要的。它们在文本模式下没有意义。

    添加-nojvm 可能不是一个好主意,除非您有单独的充分理由这样做。如果没有 JVM,您将失去一些功能,而这些功能的缺失可能会在以后导致混乱。来源:same link as above。在-nodisplay 之上,它不会使您的非图形化 Matlab 会话的图形化程度降低。


    这里有几种以非交互方式运行命令的方法。

    方式一:

    matlab -nodisplay < myScript.m
    

    exit 设为例如myScript.m 中的最后一条命令。

    方式二:

    matlab -nodisplay -r "try, myFunction(); catch e, disp(getReport(e)), exit(7), end, exit()" 
    

    第二种方式更可取,因为例如如果代码中间出现错误,则第二种方式将打印错误消息并以非零代码退出。而第一种方式相当于直接输入命令,不管 Matlab 说什么(可能是错误消息)。

    如果下一个问题是“如何在文本模式 Matlab 中抑制 welcome 消息?”,it seems there is NO good way to get rid of it

    【讨论】:

    • 自 R2019a 以来,有一个 -batch 选项专门用于以非交互方式运行脚本。它避免了-r 的所有问题(需要try/catch 和exit 语句),并且还抑制了横幅。 -r 自该版本以来不再推荐。
    【解决方案2】:

    使用以下标志启动 MatLab

    matlab -nodesktop -nojvm -nosplash
    
    • -nodesktop 阻止桌面

    • -nojvm 阻止 java 虚拟机的启动

    • -nosplash 防止启动闪屏。

    请注意,正如 Li-aung Yip 在 cmets 中指出的那样,Mathworks 不建议使用 -nojvm 标志。

    【讨论】:

    • -nojvm-nosplash 标志有什么作用?
    • -nosplash 阻止启动启动画面,-nojvm 阻止启动 java 虚拟机。
    • 我用谷歌搜索过; -nodesktop-nojvm 略有不同。 Here's an explanation by Michael Katz of The Mathworks.
    • 我没有声称-nodesktop-nojvm 是相同的(这就是我列出这两个标志的原因)。但是,阅读您的链接后,我意识到,与我之前的想法相反,JVM 不仅仅用于吸引眼球(您的评论 +1)。因此,根据您使用的功能,您可能还需要非桌面模式下的 JVM。不过我从来没有遇到过这种情况……
    • 请注意,并行计算工具箱等需要JVM,因此如果您打算使用parfor或spmd,则必须启用JVM(即不要使用-nojvm)
    【解决方案3】:

    【讨论】:

      【解决方案4】:

      将其他答案放在一起,再加上一些错误处理,将以下内容另存为可执行文件matlab-headless

      #/usr/bin/env bash
      
      # restore the "sane" state of the terminal at the end
      # otherwise interrupting the process may leave the terminal messed up
      trap 'stty sane' EXIT
      command="try, $1;, catch e, stack=getReport(e); fprintf(1, '%s\n', stack);, end, exit;"
      
      # tail gets rid of the welcome message banner
      matlab -nodisplay -nodesktop -nosplash -r "$command" | tail -n +11
      

      现在您可以运行 Matlab 命令:

      matlab-headless "somecommand('bla', 42)"
      

      【讨论】:

      • my comment above。您不应再使用-r。现在你只需要matlab -batch myscript
      【解决方案5】:

      根据您的需要,另一种方法是:

      matlab -nosplash -nodesktop -wait -log -r "Matlab Script Line 1;Matlab Script Line 2;exit;"
      

      这与 Azure DevOps Pipeline 用于将所有 Matlab 作业输出记录到其在线 CLI 窗口的方法相同。

      参考:自托管 Windows 代理

      位置:C:\agent\_work\_tasks\RunMATLABCommand_28fdff80-51b4-4b6e-83e1-cfcf3f3b25a6\0.2.15\bin\run_matlab_command.bat

      【讨论】:

      • 这是过时的建议。见我上面的评论:stackoverflow.com/questions/11046470/…
      • @CrisLuengo,仍在工作中使用 R2017B。另外,我的评论不是关于使用 -r 标志,而是更多关于使用(-wait & log vs -nojvm)。我在 docker win2016 serv 上运行它,我发现没有使用这些,CLI 跳线并在后台运行所有内容并返回 CLI 控件。当我使用这些时,它会停止 CLI 直到进程执行,并打印另一个 matlab java gui 弹出窗口上的日志。 -batch 是否结合了这些标志行为?
      • 是的,确实如此。 -wait 是一个仅限 Windows 的选项,在 Linux 上,它是决定程序是否在后台运行(无等待)或不运行(等待)的 shell。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-05
      • 1970-01-01
      • 2021-03-22
      相关资源
      最近更新 更多