在Python中运行Fortran命令行程序
我现在遇到了一点麻烦。我正在尝试为一个Fortran77的程序写一些绘图和拟合的扩展(顺便说一下,为什么这个程序要用F77重写我也搞不懂),这个程序需要通过命令行输入,也就是说,它会提示用户输入。目前这个程序使用GNUplot来绘图,但我觉得GNUplot的拟合功能不太理想,而且从Fortran调用GNUplot真的是麻烦得很。
我主要在用Numpy、Scipy和Matplotlib来满足我的拟合和绘图需求。我在想有没有办法在Python中调用这个F77程序,然后让它像其他F77程序一样运行,直到我需要它进行拟合并输出一些漂亮的图(不想用GNUplot的那些东西)。
我知道有F2PY这个工具,但我听到的评价各不相同。我也考虑过使用pyexpect,但我对它处理屏幕上预期提示的方式有过不好的体验(或者是我用得不对)。
谢谢你提供的任何信息。
2 个回答
听起来你想做的就是运行一个F77程序,然后从Python中解析输出文件(如果我理解错了请纠正我)。假设这个Fortran程序能够顺利完成,最简单的方法就是让Python接收用户输入或者配置文件中的输入(可以参考这个链接:http://docs.python.org/library/configparser.html),然后把这些输入传递给Python的进程模块:
http://docs.python.org/library/subprocess.html
让它运行F77的可执行文件,然后收集输出结果,进行分析或绘图。Python脚本只需要准备好Fortran的输入,然后在后面从指定的位置获取结果。
可以看看Doug Hellmann关于subprocess
的这个不错的教程:
你难道不能把Fortran程序生成的数据直接保存到一个文件里,然后再从Python中读取这个文件吗?
Numpy可以读取二进制文件,并把它当作数组来处理。接下来把这些数据用到matplotlib中应该就很简单了。