虽然我找到了很多关于这个问题的答案和讨论,但我无法找到特定于我的情况的解决方案。这是:
我有一个用FORTRAN编写的主程序。 我得到了一组非常有用的python脚本。 我的目标是从我的主要FORTRAN程序访问这些python脚本。目前,我只是简单地从FORTRAN调用脚本:
CALL SYSTEM('python pyexample.py')
从.dat文件读取数据并写入.dat文件。这就是python脚本和主要FORTRAN程序相互通信的方式。
我目前正在本地计算机上运行我的代码。我安装了numpy,scipy等的python。
我的问题: 代码需要在远程服务器上运行。对于严格的FORTRAN代码,我在本地编译代码并将可执行文件发送到它在队列中等待的服务器。但是,服务器没有安装python。该服务器被用作大学和工业之间的数字运算站。不能在服务器上安装python和必要的模块。这意味着我的“CALL SYSTEM('python pyexample.py')”策略不再有效。
解?: 我在线程Is it feasible to compile Python to machine code?
中找到了一些关于几件事的信息Shedskin,Psyco,Cython,Pypy,Cpython API
这些“模块”(?不确定是否可以调用它们)似乎将python脚本编译为C代码或C ++。显然不是所有的python功能都可以转换为C.同样,其中一些似乎是实验性的。是否可以使用我的FORTRAN代码编译我的python脚本?存在将FORTRAN代码转换为python的f2py,但它不起作用。
非常感谢任何帮助。谢谢你的时间。
文森特
PS:我在Ubuntu上使用python 2.6
答案 0 :(得分:3)
无论如何,您需要在服务器上获取Python运行时,否则将无法执行Python字节码。 Ignacio正在建议直接调用libpython,但由于Fortran的参数传递约定,编写C包装器来处理Fortran和CPython嵌入API之间的接口会更容易。
不幸的是,你这样做很难 - 编写一个可以调用Fortran子程序的Python程序要容易得多。
答案 1 :(得分:2)
你不想要任何这些。你应该做的是使用FORTRAN的FFI与libpython交谈,并使用API。