2012-05-16 17 views
2

我試過尋找這個答案,因爲它看起來不太複雜,但我沒有成功。我正在嘗試使用一些舊的FORTRAN代碼並將它帶入Python,以便我可以使用它。在這個過程中,我遇到了一些關於文件I/O的問題,並且我正試圖理解f2py如何處理這個問題。我正在用gfortran開發Ubuntu 11.10。例如,我嘗試使用下面的子程序:f2py和WRITE語句

f2py -c -m inout inout.f 

它創建inout.so共享庫:

C  FILE INOUT.F 

     SUBROUTINE INOUT 
    i  (NAME, STUFF) 

Cf2py Intent(in,out) NAME, STUFF 

     CHARACTER*6 NAME, STUFF 

     OPEN(unit=1,file=NAME) 
     WRITE(1,100) STUFF 
100 FORMAT(A8) 

     RETURN 
     END 

我然後使用gfortran和f2py編譯。然後在Python中,我嘗試一個簡單的測試:

python 
>>> import inout 
>>> inout.inout('test','hello') 
('test', 'hello ') 

然後退出Python並打開新創建的「測試」文件,它是空的。我可以在屏幕上打印沒有問題,但打印到文件似乎不起作用。任何指導將不勝感激。 f2py文檔沒有提到WRITE語句。

+0

你的numpy和gcc的版本是什麼?我有numpy(v1.5.1)和gcc(4.1.2),但成功輸出內容到'test'文件。 – nye17

+0

gcc 4.6.1,numpy 1.5.1 – Dave

+0

這很奇怪,因爲相同的代碼適合我。我建議你嘗試切換到另一個Fortran編譯器進行測試。不確定python版本是否會影響,但我使用python2.7,只是FYI。 – nye17

回答

2

可以看到here

Python的I/O是不會因的Fortran I/O。

+0

鏈接到這些問題的知名來源。不是論壇帖子。 – asheeshr

+0

@AshRj ..鑑於這篇文章的作者大概是f2py的創造者,我會認爲它是一個有聲望的來源 - 但是,原則上你是對的。 –

+0

@TheodrosZelleke我不知道。在那種情況下,是的,答案沒有問題。 – asheeshr