Not same fprintf MATLAB and Linux Console
显示 更早的评论
Hello everybody,
I am trying to catch an error and I have made the following code in Matlab:
catch ME
% Some error occurred if you get here.
errorMessage1 = sprintf('Error in function %s()\n',ME.stack.name);
errorMessage2 = sprintf('Error in line %d\n',ME.stack(1).line);
errorMessage3 = sprintf('Error %s()\n',ME.message);
fprintf(2,'-----------------------------\n');
fprintf(2,'%s\n', errorMessage1);
fprintf(2,'-----------------------------\n');
fprintf(2,'%s\n', errorMessage2);
fprintf(2,'-----------------------------\n');
fprintf(2,'%s\n', errorMessage3);
The output of Matlab is the following one:
Error in hello()
Error in line 386
Error Index exceeds matrix dimensions.()
But, when I execute matlab from de Linux console:
./matlab < hello.m
I just get this output:
Index exceeds matrix dimensions
I cannot see the line or the .m I am running.
What kind of problem is this?
Thanks in advance,
Javi
采纳的回答
If you write the message to stderr by
fprintf(2, '%s\n', errorMessage1);
you have to catch this channel also. Try:
fprintf(1, '%s\n', errorMessage1);
Perhaps this works instead, but I cannot try it currently and hopefully someone corrects me:
matlab -r hello.m 2>&1
12 个评论
Can you explain me 2>&1 what exactly does?
I used fprintf(1,..) and it did not work...
But 2>&1 works? I did not work with Linux for 20 years now...
This redirects the stream 2 (stderr) to 1 (stdout). See https://en.wikipedia.org/wiki/Redirection_(computing).
Do you see that I have used "matlab -r hello.m" instead of "matlab < hello.m"?
Thanks for your help.
But it seems not to work...
I just get the fprintf of the error, not the line or function
This is not clear: What exactly is "the fprintf of the error"? Do you get any output from stdout? I'm surprised that fprintf(1, ...) does not work.
Javier Naranjo
2017-10-12
编辑:Javier Naranjo
2017-10-12
The problem is that when I execute the script in MATLAB and I get an error I can see the 3 fprintf in the console (MATLAB console) (errorMessage1, errorMessage2,...)
On the other hand, when I execute in the Linux Console ./matlab < hello.m and I get an error it does not show any of the errorMessage and I only get for example: Index exceeds matrix dimensions.
I do not see the fprintf of the line or the function.
Thanks for your help
Thanks you so much! It worked! I am running hello.m from another script that opens and closes a diary.
The little problem now is that I get:
No MATLAB command specified
in the Linux Console when I run:
sudo ./matlab -r < getOutput.m -nosplash -nodesktop
It seems to be a warning... any idea how to solve this issue?
Thanks again!
Try
./matlab -r getOutput.m -nosplash -nodesktop
without the <
If I do not write down "<" and I execute
./matlab -r folder1/getOutput.m -nosplash -nodesktop
It turns:
not variable or function folder1
and it stays in an infinite loop.
Try to use quotes and provide an absolute path:
./matlab -r "~/folder1/getOutput.m" -nosplash -nodesktop
Or single quotes ' ?
/folder1/getOutput.m
|
Error: Unexpected MATLAB operator.
I tried with single and doble quotes and it did not work.. When I write down double it says too many input arguments.
Thanks
@Javier: Sorry, my mistake.
./matlab -r "cd('~/folder1'); getOutput" -nosplash -nodesktop
The parameter of the -r command must contain a valid Matlab command, not the path of a m-function. You can find more details in the documentation: https://www.mathworks.com/help/matlab/matlab_env/startup-options.html
更多回答(0 个)
类别
在 帮助中心 和 File Exchange 中查找有关 Startup and Shutdown 的更多信息
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
