【问题标题】:How to exit after running matlab script from command line?从命令行运行matlab脚本后如何退出?
【发布时间】:2013-04-26 10:50:29
【问题描述】:

这是我的python代码

DosCmd = 'matlab -wait -automation -nosplash -r "run \'' + to_run + "'\""
os.system(DosCmd)
curve_file = open('curve/'+str(index)+'.curve','r') 

我在 python 脚本中运行一个 .m 文件,它工作正常,但在执行 .m 文件后,它卡在os.system(DosCmd)。 为了让python运行以下代码,我必须关闭这个窗口:

由于这部​​分代码在循环中,这真的很困扰我。 我发现网上有人说matlab执行完.m文件后可以自动退出,而我的就是不行。谁能告诉我我做错了什么或者我该怎么办?谢谢!

【问题讨论】:

  • 试试break键CTRL+C
  • 你试过exit吗?

标签: python matlab


【解决方案1】:

在您执行的 MATLAB 代码中添加对 exit 的调用。

DosCmd = 'matlab -wait -automation -nosplash -r "run \'' + to_run + "', exit\""

您的引用看起来有点奇怪,但您只需将, exit 添加到您传入-r 参数的命令末尾即可。

顺便说一句,使用subprocess 会容易得多,这样您就可以让subprocess 为您做报价。

subprocess.check_call(['matlab', '-wait', '-automation', '-nosplash', 
    '-r', 'run \' + to_run + \', exit'])

【讨论】:

  • 谢谢,它有效!另一个问题,有没有办法让我“重用”matlab 而不是一次又一次地启动它?
  • 嗯,我认为 JonB 很好地涵盖了这一点。 mlabwrap 对我来说看起来不错。您可以将 MATLAB 用作 COM 服务器,但我怀疑 mlabwrap 会更干净。
【解决方案2】:

将命令 exit 添加到脚本的最后一行。
-wait 命令行开关意味着启动应用程序在 matlab 退出之前不会关闭。如果你真的让 python 对 ML 输出做一些事情,那么 -wait 是正确的,否则去掉 -wait。

另外,你确定你真的想每次都在循环中启动新的 matlab 会话吗? Matlab 公开了 DDE 功能,它允许您打开一个实例并发送命令。

或者,您可能会查看 PyMat 或 mlabwrap 等现有的 python 到 matlab 桥接库之一。

【讨论】:

  • 谢谢!我需要“等待”,因为接下来我将处理 ML 输出。
  • PyMat 和 mlabwrap 好像好多年没更新了...不过我用的是python3...
  • @laike9m:使用 COM 接口:stackoverflow.com/a/2885122/97160(确保您之前至少运行过一次matlab -regserver
  • @laike9m:只需从 MATLAB 外部的控制台运行 matlab.exe -regserver。它将 MATLAB 注册为 COM 服务器。如果你还没有这样做,你只需要这样做一次
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-31
  • 1970-01-01
  • 2012-01-06
  • 2016-12-07
  • 2017-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多