簡體   English   中英

在Matlab中未顯示來自fortran應用程序的輸出

[英]Output from fortran application not showing up in Matlab

我在Matlab中執行的fortran應用程序的輸出存在一些問題。 我們使用Matlab調用許多fortran應用程序並顯示輸出和結果。

我在OSX上使用gfortran來構建其中一個程序,該程序執行大量文件輸出,而少量輸出到stdout以跟蹤進度。 stdout輸出主要通過print *語句完成,但是我也嘗試過write(*,*)。 該程序使用OpenMP,但是在OpenMP並行段中沒有執行print *或write(*,*)語句。從終端執行該程序時,一切工作正常。 但是,當從matlab內部執行程序時,stdout沒有輸出。 文件輸出正常。

此外,使用Intel的ifort編譯時,相同的代碼可以在matlab中顯示其輸出而不會出現問題。 不幸的是,我沒有定期訪問Intel編譯器的權限。

我很肯定輸出將輸出到stdout(而不是stderr),並且我已經嘗試從代碼內進行刷新(調用flush(6)和調用flush(0)),但這似乎並沒有使區別。

我不確定是什么原因造成的。 有什么想法嗎?

一些相關信息:OS:OSX 10.6.8(64位模式)

Matlab:R2012b

gfortran:4.7.2(通過芬克獲得)

編譯標志:-cpp -fopenmp -ffree-line-length-0 -fno-range-check -m64 -static-libgfortran -fconvert = little-endian -fstrict-aliasing

編輯:

我做了一些測試,創建了一個簡單的“ hello”程序:

program printTest
write (*,*) 'hello'
end program

用...編譯

gfortran test.f90 -o test

表現出相同的行為。

我還嘗試使用gfortran的早期版本(4.2.1)進行編譯,該版本產生了一些有趣的結果。 它在終端中執行正常,但是在matlab中我得到以下信息:

!./ test dyld:懶惰的符號綁定失敗:找不到符號:__gfortran_set_std引用自:/Users/sah/Desktop/./test預期存在於:/Applications/MATLAB_R2012b.app/sys/os/maci64/libgfortran.2.dylib

dyld:未找到符號:__gfortran_set_std引用自:/Users/sah/Desktop/./test預期存在於:/Applications/MATLAB_R2012b.app/sys/os/maci64/libgfortran.2.dylib

./test:跟蹤/斷點陷阱

這使我相信這是一個圖書館問題。 在這種情況下,使用-static-libgfortran會產生相同的結果。

我相信Matlab是單線程應用程序。 當您調用多線程執行程序時,我看到了將輸出管道傳輸回Matlab的各種問題。 您是否考慮過重新編譯成Fortran mex文件?

我不確定是否比獨立可執行文件更好地將mex文件打印到stdout。

還有其他選擇。 一種是將所有診斷信息寫入(附加)到文件中,然后在需要時僅查看文件。 例如,Emacs每秒或您設置間隔的任何時間都會自動“還原”文件的內容。 另一個選擇可能是將fortran源轉換為matlab源(請參閱f2matlab),並將其全部保留在matlab中。

bb

根據系統功能文檔

[狀態,結果] = system('command')將完成狀態返回到狀態變量,並將命令的結果返回到結果變量。

[status,result] = system('command','-echo')也將輸出強制到命令窗口。

因此,您應在系統調用中使用“ -echo”參數,以直接在命令窗口中查看輸出

system(['cd "',handles.indir,'";chmod u+x ./qp.exe',... ';./qp.exe'], '-echo')

或者您可以將stdout分配給變量:

[ret txt] = system(['cd "',handles.indir,'";chmod u+x ./qp.exe',... ';./qp.exe'])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM