如何从Python调用MATLAB脚本时抑制MATLAB输出?
如何抑制MATLAB引擎调用时的输出?
我来给你几个实用的解决办法,根据你的需求选就行:
方法1:修改MATLAB函数,内部捕获输出
如果你能改动foo.m脚本,直接把产生输出的语句用evalc()包起来就行——这个函数会把命令窗口的输出捕获住,不会打印出来:
% foo.m function foo = run() evalc('disp(''Hello!!'');'); % 用evalc包裹输出语句,避免打印 foo = 1; end
这样不管是直接在MATLAB里跑,还是通过Python引擎调用,都不会看到Hello!!的输出。要是你想保留MATLAB单独运行时的输出,可以加个简单的判断(比如检查是否是Python调用环境),不过一般用上面的方式就足够了。
方法2:Python调用时用evalc捕获输出
要是不想动MATLAB代码,那就在Python里用MATLAB的evalc函数来调用foo——它会把所有MATLAB命令窗口的输出都抓成字符串,不会显示出来:
import matlab.engine eng = matlab.engine.start_matlab() # 先让MATLAB把函数结果存在工作区,再取出来 eng.evalc('result = foo();') py_foo = eng.result
注意哦,直接用eng.evalc('foo()')返回的是输出的文本内容,不是函数的返回值1,所以得先把结果存在MATLAB的工作区里,再提取到Python这边。
方法3:启动引擎时直接重定向输出流
要是你想彻底屏蔽所有MATLAB的输出(包括警告、日志之类的),可以在启动引擎时把标准输出重定向到空设备:
import matlab.engine import os # 把MATLAB的stdout重定向到系统空设备,丢弃所有输出 eng = matlab.engine.start_matlab(stdout=open(os.devnull, 'w')) py_foo = eng.foo()
这种方式一劳永逸,适合完全不想看到任何MATLAB输出的场景。
内容的提问来源于stack exchange,提问作者Neb
相关产品推荐
相关产品推荐

