为什么我在使用Matlab 7.14中的系统函数执行时,我的Fortran脚本的输出不会在Matlab命令窗口中显示出来(R2012A)?

30个视图(过去30天)
我正在运行Matlab 7.14(R2012A)并与Macintosh上的外部Fortran脚本接口。使用Gfortan的本地框上编译了代码。我可以用爆炸(!),UNIX或系统函数成功运行脚本。
问题是代码定期输出文本,我希望信息回到命令窗口。我尝试使用系统函数的“-echo”选项,MATLAB中的命令窗口不会显示输出。
这个问题不存在MATLAB 7.11 (R2010b)。当我通过MATLAB 7.11 (R2010b)运行完全相同的代码时,所有想要的文本将显示到命令窗口。

接受的答案

Mathworks支金宝app持团队
这从MATLAB (7.14) R2012a开始发生,其中三个数据流的环境变量STDIN, STDOUT和STDERR被设置为-1。
为了解决这个问题,你可以将执行FORTRAN脚本的SYSTEM调用包装如下:
setenv (gfortran_stdin_unit.5
setenv (GFORTRAN_STDOUT_UNIT6
setenv (GFORTRAN_STDERR_UNIT0
系统(myFortranScript-回声
%这将重置环境变量返回到-1的默认值。
setenv (gfortran_stdin_unit.-1
setenv (GFORTRAN_STDOUT_UNIT-1
setenv (GFORTRAN_STDERR_UNIT-1
在任何程序中,都有三个保留流可供程序读写。
'stdin'通常是用作输入流的内容,例如程序当程序要求您在键盘上键入某些内容时。
' stdout '通常用作输出流,例如在FORTRAN中使用WRITE函数时。
”stderr’ is generally what is used as the error stream, which is where a program will write the issues it is encountering, so that a developer or debugger can differentiate between output that is supposed to be seen and errors in the program that are discovered.
gfortran编译的程序尝试打开这三个流,然后在它们完成时无条件地关闭它们。然而,这对于像MATLAB这样的程序来说是一个问题,它干扰用户进程的输入和输出,这些进程也从' stdin ', ' stdout '和' stderr '读取和写入。
因此,从MATLAB(7.14)R2012A向后,默认情况下,这三个环境变量设置为-1。将此设置为-1将确保MATLAB对这些流进行控制,从而允许其正常运行。在运行从MATLAB中需要此访问的Fortran程序时,必须暂时进行这些更改。
当这些变量被设置为-1时,请注意MATLAB将不会从FORTRAN脚本期望写入的' stdout '和' stderr '流中读取,也不会写入脚本期望读取的' stdin '流。这将导致在命令窗口中无法捕获程序的输出。
2的评论

登录发表评论。

更多的答案(0)

下载188bet金宝搏


释放

R2012a

社区寻宝

在MATLAB中心找到宝藏,并发现社区可以如何帮助您!

开始狩猎!