Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 禁止显示Matlab启动消息

我想非交互式地在bash中调用matlab,并在Matlab之外使用其结果。

例如,我有一个脚本test.m

rand(3,4) quit 当我执行bash

$ matlab -nosplash -nodesktop -nodisplay -r test Warning: No window system found. Java option 'MWT' ignored < MATLAB (R) > Copyright 1984-2008 The MathWorks, Inc. Version 7.7.0.471 (R2008b) September 17, 2008 To get started, type one of these: helpwin, helpdesk, or demo. For product information, visit www.mathworks.com. ans = 0.8147 0.9134 0.2785 0.9649 0.9058 0.6324 0.5469 0.1576 0.1270 0.0975 0.9575 0.9706 是否可以隐藏Matlab的启动消息,并且只显示结果,也不要使用“ ans =”。

注意,我问的是一个一般性的问题,而不仅仅是这个例子。

谢谢并恭祝安康!


回答:
您可以使用Unix命令“ tail + n”删除输出的前n行。该标题看起来像10行,因此将其剥离。

$ matlab -nosplash -nodesktop -nodisplay -r test | tail +10 但是,这有点脆弱,因为警告(例如“无窗口系统”)将被剥离,并且标题大小将根据发生的警告而有所不同(这些警告对于诊断很有用)。同样,该警告可能位于STDERR而不是STDOUT上,因此您可能需要“ tail +9”。

一种更可靠的方法是使用fopen / fprintf / fclose修改Matlab脚本以写入单独的文件。这样,Matlab的标题,警告,错误等将与所需的格式化输出分开。要使“ disp”输出进入该单独的文件句柄,可以使用evalc捕获它。可以使用-r消息中的test()参数来指定输出文件,并在文件名中包含$$ env变量(bash进程的PID),以防止在多进程环境中发生冲突。

function test(ppid) outfile = sprintf('outfile-%d.tmp', ppid); fh = fopen(outfile, 'w'); myvar = rand(3,4); str = evalc('disp(myvar)'); fprintf(fh, '%s', str); fclose(fh); 要从bash调用它,请使用此调用形式。 (这里可能是较小的语法问题;我现在没有要测试的Unix盒。)

% matlab -nosplash -nodisplay -r "test($$)" -logfile matlab-log-$$.tmp 假设您的bash PID是1234。现在您的输出在outfile-1234.tmp中,而Matlab日志在matlab-log-1234.tmp中。如果您不想依赖于pwd,请将其粘贴在/ tmp中。您可以扩展它以通过单个matlab调用创建多个输出文件,从而在需要计算多个内容时节省启动成本。



更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 03:10


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.