[英]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.