Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从命令行运行matlab脚本后如何退出?_Python_Matlab - Fatal编程技术网

Python 从命令行运行matlab脚本后如何退出?

Python 从命令行运行matlab脚本后如何退出?,python,matlab,Python,Matlab,这是我的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运行以下代码,我必须关闭此窗口: 由

这是我的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文件后自动退出,但我的却没有。有人会告诉我我做错了什么,或者我应该做什么吗?Thx

添加对执行的MATLAB代码的
exit
调用

DosCmd = 'matlab -wait -automation -nosplash -r "run \'' + to_run + "', exit\""
您的引用看起来有点不可靠,但您只需要在
-r
参数中传递的命令末尾添加
,退出

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

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

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

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


或者,您可以查看PyMat或mlabwrap等,这是一个现有的python到matlab桥接库。

尝试使用中断键
CTRL+C
您是否尝试过
exit
?Thx,它可以工作!还有一个问题,有没有一种方法可以“重用”matlab,而不是一次又一次地启动它?我想JonB已经很好地解决了这个问题<代码>mlabwrap
对我来说很不错。您可以使用MATLAB作为COM服务器,但我怀疑
mlabwrap
会更干净。谢谢!我需要“等待”,因为ML输出是我下一步要处理的。看起来PyMat和mlabwrap已经好几年没有更新了…但我使用的是python3…@laike9m:使用COM接口:(确保您之前至少运行过一次
matlab-regserver
)@laike9m:只需从matlab外部的控制台运行
matlab.exe-regserver
。它将MATLAB注册为COM服务器。如果你还没有这样做,你只需要做一次