2010-03-01 40 views
4

有没有办法在FORTRAN中使用python函数?我被给了一个包含一些函数的python脚本,我需要从FORTRAN代码访问这个函数。如何从Python中编写的FORTRAN访问函数?

我见过允许从Python访问FORTRAN子程序的'f2py',以及将python脚本编译为可执行文件的py2exe。 'py2f'有什么吗?一个Python脚本可以编译成一个目标文件吗?然后我可以将它与FORTRAN代码链接起来。

例如,将'mypython_func.py'视为包含函数和'mainfortran.f'的Python脚本作为调用Python函数的主程序FORTRAN代码。我想:从'mypython_func.py'编译为'mypython_func.o',从'mainfortran.f'编译为'mainfortran.o'(>> gfortran -c mainfortran.f),然后链接这些文件(> > gfortran -c mainfortran.o mypython_func.o -o myexec.exe)。有这样的可能吗?

谢谢你的时间和帮助。

文斯

回答

6

不要浪费大量的时间编译和翻译。做这个。

  1. Fortran第1部分程序为Python编写一个东西文件。写入标准输出。调用此F1

  2. Python读取文件,执行Python计算,将响应写入Fortran文件。将此称为P.

  3. Fortran第2部分程序从标准输入读取文件。这些是Python计算的结果。

将其连接

F1 | python p.py | F2 

你不重新编译任何东西。还要注意,所有三个并发运行,这可能是一个相当大的加速。

Python的中间位应该是这样的。

import sys 
import my_python_module 
for line in sys.stdin: 
    x, y, p, q = map(float, line.split()) 
    print ("%8.3f"*6) % (x, y, z, p, q, my_python_module.some_function(x, y, p, q)) 

一个简单的封装函数,它读取stdin并以Fortran友好格式写入stdout。

+0

太好了,我会试试看。谢谢。 – 2010-03-01 16:45:42

4

@ S.Lott的解决方案是要走的路。但要回答你的问题---是的,可以从Fortran中调用Python。我通过首先使用Cython的C API暴露Python,然后使用iso_c_binding模块为这些C函数创建Fortran接口,最后从Fortran调用它们来完成此任务。这是非常重量级,在大多数实际问题不值得(使用管道方法),但它是可行的(它为我工作)。