在Python脚本中运行Fortran可执行文件

时间:2016-10-12 00:09:33

标签: python fortran

我正在编写一个包含以下目标的Python脚本:

  1. 从当前工作目录开始,将目录更改为子目录' A'
  2. 稍微调整一下fort.4文件
  3. 运行Fortran二进制文件(其语法为file_name movie1.dat !name of a general file the binary reads nbr_box ! line3-8 is general info 2 this_box 1 lrdf_bead .true. beadid1 C1 !this is the line I must change beadid2 F4 !This is a second line I must change lrdf_com .false. bin_width 0.04 rcut 7 继续,直到我点击包含二进制文件的文件夹);返回2.直到我的特定目标完成,然后
  4. 将子目录退回到父目录,然后输入另一个子目录并返回2.直到我遍历所有相关文件夹。
  5. 代码很顺利。我不得不在很大程度上依赖Python的OS模块来完成目录工作。但是,我从未有过任何经验a)使用python对文件进行微调,以及b)运行可执行文件。你能不能给我一些关于Python模块的想法,把我引导到类似的堆栈源等,或者给出一些可以实现的方法?我知道这是一个模糊的问题,所以请问你是否不明白我在问什么,我会详细说明。此外,我必须对此fort.4文件所做的更改本质上是重复的;它们都发生在文件中的相同位置。

    干杯

    EDIT :: 整个fort.4文件:

    [HttpPost]
    public ActionResult Save(string tempName)
    {
      return Json(tempName);
    }
    

    所以,我需要改变" C1"到" C2"例如。这些变化非常微不足道,但我必须强调主要的fortran可执行文件读取此fort.4以及我已经创建的这个movie1.dat文件这一事实。希望这有帮助

1 个答案:

答案 0 :(得分:0)

好的,这里有一些重要的事情,首先我们需要能够管理我们的cwd,因为我们将使用os模块

import os

每当方法对文件夹进行操作时,将目录更改为文件夹并返回父文件夹非常重要。这也可以通过os模块实现。

def operateOnFolder(folder):
     os.chdir(folder)
     ...
     os.chdir("..")

现在我们需要为每个目录做一些方法,包括这个,

for k in os.listdir(".") if os.path.isdir(k):
    operateOnFolder(k)

最后,为了对一些预先存在的FORTRAN文件进行操作,我们可以使用内置文件操作符。

fileSource = open("someFile.f","r")
fileText = fileSource.read()
fileSource.close()
fileLines = fileText.split("\n")
# change a line in the file with -> fileLines[42] = "the 42nd line"
fileText = "\n".join(fileLines)
fileOutput = open("someFile.f","w")
fileOutput.write(fileText)

您可以从output.fx ::

创建并运行可执行文件source.f90
subprocess.call(["gfortran","-o","output.fx","source.f90"])#create
subprocess.call(["output.fx"])                             #execute