【问题标题】:f2py and the WRITE statementf2py 和 WRITE 语句
【发布时间】:2012-05-16 22:54:16
【问题描述】:

我已尝试搜索此答案,因为它似乎并不太复杂,但我没有成功。我正在尝试使用一些旧的 FORTRAN 代码并将其带入 Python,以便我可以使用它。在此过程中,我遇到了一些文件 I/O 问题,我试图了解 f2py 如何处理这些问题。我正在使用 gfortran 开发 Ubuntu 11.10。例如,我尝试使用以下子程序:

C     FILE INOUT.F

      SUBROUTINE INOUT
     i     (NAME, STUFF)

Cf2py Intent(in,out) NAME, STUFF

      CHARACTER*6 NAME, STUFF

      OPEN(unit=1,file=NAME)
      WRITE(1,100) STUFF
 100  FORMAT(A8) 

      RETURN
      END

然后我使用 gfortran 和 f2py 进行编译:

f2py -c -m inout inout.f

这会创建 inout.so 共享库。然后在 Python 中,我尝试了一个简单的测试:

python
>>> import inout
>>> inout.inout('test','hello')
('test', 'hello ')

然后退出 Python 并打开新创建的“测试”文件,它是空的。我可以打印到屏幕没问题,但打印到文件似乎不起作用。任何指导将不胜感激。 f2py 文档没有提到 WRITE 语句。

【问题讨论】:

  • 你的numpy和gcc是什么版本的?我有 numpy (v1.5.1) 和 gcc (4.1.2) 但成功将内容输出到test 文件。
  • 这很奇怪,因为相同的代码对我有用。我建议您尝试切换到另一个 fortran 编译器进行测试。不确定python版本是否重要,但我使用的是python2.7,仅供参考。
  • 我用 gcc 4.4 让它在我的家用电脑上工作,我现在正试图“降级”gcc。我想知道这会不会有问题?
  • gcc 对于您系统中的大多数库和依赖项来说都是非平凡的,我建议您首先在失败的计算机中给英特尔编译器一个镜头。

标签: fortran f2py


【解决方案1】:

你可以看到here

Python I/O 不会从 Fortran 捕获 I/O。

【讨论】:

  • @AshRj ..鉴于该帖子的作者可能是 f2py 的创建者,我认为它是一个有信誉的来源——但是,原则上你是对的。
  • @TheodrosZelleke 我不知道。在那种情况下,是的,答案没有问题。
  • 这是否意味着python通常不会从fortran捕获write(*,*)commands?
  • @Hubschr,write fortran 命令将被执行,但可能不会以您想要的方式执行。
  • 好的...假设我想在控制台中查看来自 fortran 的 write 命令的输出,执行 python 代码...会发生什么?
猜你喜欢
  • 2017-08-25
  • 2016-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多