2011-03-28 75 views
2

因此,我有點尷尬。我正在試圖編寫Fortran77的擴展程序(爲什麼這個程序在F77中被重寫,這也是一個謎),它需要命令行輸入,即它會提示用戶輸入。目前該程序使用GNUplot進行繪圖,但在我看來,GNUplot適配程序並不理想,而從Fortran調用GNUplot對於至少可以說是一種痛苦。在Python中運行Fortran命令行程序

我一直在努力與Numpy,Scipy和Matplotlib,以滿足我的擬合和繪圖的需求。我想知道是否有一種方法可以在Python中調用F77程序,然後讓它像我的任何其他F77程序一樣運行,直到我需要它的部分適合並吐出一些好的情節(沒有這個GNUplot的東西)。

我知道關於F2PY,但我聽說過它的混合的東西。我也考慮過使用pyexpect並從那裏開始,但是我對它在屏幕上處理預期提示的方式(或者我錯誤地使用它)有不好的經驗。

感謝您對此的任何信息。

+0

所以Fortran程序是提示用戶輸入的交互式程序?你可以重寫它來接受命令行參數或其他腳本輸入嗎? – 2011-03-28 22:56:56

+0

是的,它基本上會詢問你想分析哪個數據通道,以及你是否想要設置限制或者它使用默認設置。我知道我可以通過在其上運行一個shell腳本來相當容易地自動化部分,但問題是我們在不同的渠道之間來回切換,可能想調整一些參數而無需再次運行整個事件。當前格式的原因在下面的註釋中@greg – madtowneast 2011-03-28 23:06:55

+0

如果您打算通過標準輸出或輸出文件(使用ramdisk可以很快)獲得FORTAN的輸出,則可以使用'subprocess'。但是我認爲你希望能夠將正在運行的FORTRAN程序內存作爲一個numpy數組訪問? – Paul 2011-03-28 23:15:03

回答

2

難道你不能只將Fortran程序生成的數據轉儲到文件,然後從python中讀取它?

Numpy可以讀取二進制文件並將其視爲數組。 從這裏走到matplotlib那麼應該是一個輕鬆。

+0

所有事實上都存儲在FITS文件中,在python中使用python可以輕鬆處理,而在F77中很痛苦。問題是我的老闆想要把所有東西都放在一個包裏,而不是用兩種語言編寫20個不同的程序(這就是舊版代碼的設置方式)。他認爲這使得它更容易維護。 @fabrizioM – madtowneast 2011-03-28 23:14:21

+0

@madtowneast:「一個軟件包代替了2種語言的20個不同程序」?這是否意味着您正在重寫Fortran?如果是這樣,那麼改變這個問題。如果你不重寫Fortran,那麼這個答案有什麼問題?你仍然有兩種語言,爲什麼不從另一種語言運行一種語言呢? – 2011-03-29 01:30:25

+0

@ S.Lott:我還沒有寫過F77,我來自C++,Python世界。我們只在使用兩種語言時遇到了問題,考慮到其中之一是專有的(IDL),而兩者之間的相互作用並不理想。 Fortran代碼已被DEC Fortran的其他人重寫爲F77,但我很榮幸地調試並添加了他遺漏的部分。我的老闆又一次想要fortran而沒有別的。我並不是說答案是錯的,我個人會做@fabrizioM所說的話,但我想爲我的老闆提供一個妥協方案,F77在這裏是python。 – madtowneast 2011-03-29 02:26:07

1

這聽起來像你想要做的就是運行F77程序,然後解析輸出文件,全部來自python(糾正我,如果我錯了)。假設Fortran程序運行完成,最簡單的方法是設置python以從用戶或配置文件(參見http://docs.python.org/library/configparser.html)獲取輸入,然後將這些輸入饋送到python進程模塊中:

http://docs.python.org/library/subprocess.html

它運行F77可執行文件,然後收集輸出並分析/繪製它們。所有的python腳本都需要做的就是準備fortran的輸入,然後從某個指定的地方獲取結果。

退房從道格·赫爾曼本很好的教程上subprocess

http://www.doughellmann.com/PyMOTW/subprocess/

+0

將配置文件傳遞給F77的問題是,基本上用戶會在開始時獲得選擇通道的提示,並且隨着處理繼續,必須從GNUPlot圖中選擇多個參數。我之前曾看過子處理器,但不確定它是否能夠做我需要做的事情,尤其是,整個繪圖部分在GNUPlot中。 – madtowneast 2011-03-29 00:02:46

+0

@madtowneast:這是STDIN和STDOUT管道所做的。 http://www.doughellmann.com/PyMOTW/subprocess/#working-with-pipes-directly您必須將FORTRAN管道傳遞給Python用戶或者讓python猜測選項。 – Paul 2011-03-29 00:06:33

+0

@madtowneast:是否在GNUplot上鍵入或圖形選擇參數? – Paul 2011-03-29 00:10:29