我正在尝试为使用f2py的一些fortran代码构建一个python包,并且遇到了一个非常奇怪的问题。
我在Windows 8上使用Python 3.4.3 32位,gfortran 4.8.1和numpy 1.9.2。
f2py编译fortran代码,以便我可以从python中调用它。代码有多个子程序。其中一些有效,但有两个没有。重要的区别似乎是跨越多行的子程序声明。工作子例程在一行中声明。失败的跨越多行。
示例:
Python调用
# import QC1_LIB ("library" of fortran code).
import QC1_LIB
TSDs = []
message += "Duplicate and TSD Check have started...\n"
QC1_LIB.dupandtsdchck(ts[0:##], data[0:##], ##, ##, ##, file, TSDs[0:##], ##)
其中##
是一些在其他地方确定并分配的整数。
Fortran子程序声明
1234567
SUBROUTINE DUPANDTSDCHCK(ts,data,nlines,nchar,frd,flnm,
$ TSDs,counter)
python不识别fortran代码中的TSDs
,即它认为只有7个参数,实际上有8个。它返回错误IndexError: QC1_LIB.dupandtsdchck() 7th argument (counter) can't be converted to int
我没有发现任何地方提到这种问题。发生了什么,我该如何解决?
注意:我意识到我需要对fortran代码进行一些更改,以便将所需的输出实际输入python工作区,因为f2py将子例程转换为函数,但我稍后会担心。