使用f2py从fortran返回字符串和字符数组

2024-03-28 16:36:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python包装一些fortran。这最终会涉及到字符串和字符数组的操作,所以我想我会尝试在一些简单的东西上练习。在

我在Windows8上使用的是Gfortran4.8.1、Numpy1.9.2和Python3.4.3

我创建了以下fortran代码。在

  SUBROUTINE TESTER(my_string,a,b,c,d)
  integer a,b,c,d
  character(LEN=1000) :: my_string
C stuff for f2py. 
Cf2py character, intent(in, out) :: my_string
Cf2py integer, intent(in, out) :: a
Cf2py integer, intent(in, out) :: b
Cf2py integer, intent(in, out) :: c
Cf2py integer, intent(in, out) :: d
  a = 1
  b = 2
  c = 3
  d = 4
  write(6,*) 'my_string = ',TRIM(my_string)
  my_string = TRIM(my_string)//'. I was added!'
  write(6,*) 'my_string = ',TRIM(my_string)

  end

  SUBROUTINE TESTER2(charac)
  implicit none
  character(LEN=100), allocatable :: charac(:)
C stuff for f2py. 
Cf2py character(LEN=100), allocatable, intent(in, out) :: charac(:)
  ALLOCATE (charac(4))
  charac(4) = 'I was added!'

  end

下面是我的python调用。在

^{pr2}$

我遇到了两个问题。在

1)当我将字符串text传递给test.tester时,我的预期输出是my_string. I was added!。但是,我得到b'my_string. I was added!。这个b'是从哪里来的?我如何摆脱它?在

2)test.tester2不能用f2py编译。我一直收到错误Tpye mismatch in argument 'charac': passed CHARACTER(1) to REAL(4)。我做了什么导致这种情况?我如何纠正它?在

注意:这与我的另一个问题Why does f2py not include all arguments?有关。有人告诉我,我在这里所做的可能会解决这个问题。在


Tags: inaddedstringlenmyintegeroutfortran