matlab运行.m文件的命令,Matlab:从命令行运行m文件

假设

我在以下位置有一个m文件:

C:\M1\M2\M3\mfile.m

Matlab的exe文件位于以下位置:

C:\E1\E2\E3\matlab.exe

我想通过命令行在Matlab中运行此m文件,例如在.bat文件中。 我该怎么做,有办法吗?

您可能会发现这些有用:stackoverflow.com/questions/14495/,stackoverflow.com/questions/1857825/run-matlab-in-batch-mode

这样的命令将成功运行m文件:

"C:\\matlab.exe" -nodisplay -nosplash -nodesktop -r"run('C:\\mfile.m');"

另一个类似的问题在这里得到答复:stackoverflow.com/questions/25102699/

如果您在末尾添加" exit"命令以使答案更加实用和有用,那将是很好的。

" run"命令中及其前后的单引号和双引号很重要!

如果您想传递参数怎么办?

Windows版本是否支持-nodesktop选项? 我以为不是,但可能是错误的。

请注意,自R2019b起,不再建议使用-r。

我认为前面的答案中没有提到的重要一点是,如果未明确指出,则matlab解释器将保持打开状态。

因此,对于@hkBattousai的答案,我将添加exit命令:

"C:\\matlab.exe" -nodisplay -nosplash -nodesktop -r"run('C:\\mfile.m');exit;"

由于某些原因,如果mfile.m触发错误,则永远不会调用显式的exit函数,从而使整个过程处于等待状态...

这是我要用来优雅地处理脚本错误的方法:

C:\\matlab.exe" -nodisplay -nosplash -nodesktop -r"try, run('C:\\mfile.m'), catch, exit, end, exit"

如果您需要更多详细信息:

C:\\matlab.exe" -nodisplay -nosplash -nodesktop -r"try, run('C:\\mfile.m'), catch me, fprintf('%s / %s

',me.identifier,me.message), end, exit"

我在这里找到了原始参考。

在Linux上,您可以这样做,并且实际上可以将自定义错误代码发送回Shell,如下所示:

#!/bin/bash

matlab -nodisplay -nojvm -nosplash -nodesktop -r \

"try, run('/foo/bar/my_script.m'), catch, exit(1), end, exit(0);"

echo"matlab exit code: $?"

如果脚本引发异常,则输出matlab exit code: 1,否则输出matlab exit code: 0。

要显示错误(如未捕获时的MATLAB一样),只需执行"try, run(foobarmy_script.m), catch e, disp(getReport(e)), exit(1), end, exit(0);"

步骤如下:

启动命令行。

用cd C:\M1\M2\M3输入包含.m文件的文件夹

运行以下命令:C:\E1\E2\E3\matlab.exe -r mfile

Windows系统将使用当前文件夹作为MATLAB搜索.m文件的位置,并且-r选项会在启动后立即尝试启动给定的.m文件。

它不会在.bat文件中运行。 我以它为例。 实际上,我将通过Win32 API函数CreateProcessW()运行它。

cat 1.m | matlab -nodesktop -nosplash

我使用Ubuntu

感谢马拉特。您的评论对我有所帮助。

但是我想添加我的try-catch块,因为我发现了MExeption方法getReport(),该方法返回整个错误消息并将其打印到matlab控制台。

另外,我打印了文件名,因为此编译是调用matlab的批处理脚本的一部分。

try

some_code

...

catch message

display(['ERROR in file: ' message.stack.file])

display(['ERROR: ' getReport(message)])

end;

对于传递给遗留代码生成方法的错误模型名称,输出如下所示:

ERROR in file: C:\..\..\..

ERROR: Undefined function or variable 'modelname'.

Error in sub-m-file (line 63)

legacy_code( 'slblock_generate', specs, modelname);

Error in m-file (line 11)

sub-m-file

Error in run (line 63)

evalin('caller', [script ';']);

最后,要在Windows命令提示符窗口中显示输出,只需将Matlab控制台登录到带有-logfile logfile.txt的文件(另外使用-wait)并调用批处理命令type logfile.txt

从R2019b开始,有一个新的命令行选项-batch。它替换了-r,不再建议使用。它还统一了跨平台的语法。例如,请参阅Windows文档,对于其他平台,说明相同。

matlab -batch"statement to run"

这将在没有桌面或初始屏幕的情况下启动MATLAB,将所有输出记录到stdout和stderr,在语句完成时自动退出,并提供报告成功或错误的退出代码。

因此,不再需要在代码周围使用try / catch来运行,也不再需要添加exit语句。

我在bash脚本中运行此命令,尤其是提交SGE作业和批处理的东西:

/Path_to_matlab -nodisplay -nosplash -nodesktop < m_file.m

由于所有答案都没有提供输入参数的信息,因此

在这里添加。经过研究,我发现了这个链接

输入参数与我们运行Matlab函数的方式非常相似。

matlab -r 'try myfunction(argument1,argument2); catch; end; quit'

如果您以某种方式从bash / terminal获取参数,则只需将其插入到bash命令中,如下所示:

matlab -r 'try myfunction($MY_BASH_ARG,argument2); catch; end; quit'

(这是经过反复试验的结果)

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Matlab的.m文件转换为可调用的C++库有多种方法。以下是一种常见的方法: 首先,将Matlab的.m文件转换为C++语言。可以使用Matlab提供的嵌入式功能来生成C代码。在Matlab命令行下,可以使用`codegen`函数将.m文件转换为C代码。例如,如果我们有一个名为`myfunc.m`的Matlab函数文件,可以使用以下命令将其转换为C代码: ```matlab codegen myfunc.m -config:lib -args {input_arg1, ... , input_argn} ``` 其中`input_arg1, ... , input_argn`是该函数的输入参数。转换完成后,将会生成一个名为`myfunc`的文件夹,其中包含了C代码的相关文件。 接下来,创建一个用C++编写的接口函数,使得C++代码能够调用C代码。这个接口函数将充当C代码和C++代码之间的桥梁。在C++代码中,可以使用外部关键字`extern`来声明C代码中的函数。然后,在这个接口函数中,可以将C++的数据类型转换为C的数据类型,并调用C代码中相应的函数。 最后,将C++代码编译成一个库文件,以便其他C++程序可以调用。可以使用C++编译器(如g++)将C++代码编译为动态链接库(.dll)或静态库(.lib)。编译的命令可能会有所不同,具体取决于所使用的编译器。编译完成后,将会生成一个库文件,可以在其他C++程序中使用。 综上所述,将Matlab的.m文件转换为可调用的C++库的过程包括将.m文件转换为C代码,编写C++接口函数,并将C++代码编译为库文件。通过这个过程,用户可以在C++环境中使用原本只能在Matlab环境中运行的函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值