2010-03-01 5 views
4

FORTRAN에서 파이썬 기능을 사용할 수있는 방법이 있습니까? 일부 기능을 포함하는 파이썬 스크립트를 받았고 FORTRAN 코드에서이 함수에 액세스해야합니다.Python으로 작성된 FORTRAN에서 함수에 액세스하려면 어떻게해야합니까?

필자는 'f2py'를 사용하여 파이썬에서 FORTRAN 서브 루틴에 액세스 할 수 있고 py2exe는 python 스크립트를 실행 파일에 컴파일 할 수 있습니다. 'py2f'에 대한 정보가 있습니까? 파이썬 스크립트를 오브젝트 파일로 컴파일 할 수 있습니까? 그런 다음 FORTRAN 코드와 연결할 수 있습니다.

예를 들어 'mypython_func.py'는 함수를 포함하는 Python 스크립트이고 'mainfortran.f'는 Python 함수를 호출하는 주 프로그램의 FORTRAN 코드입니다. 'mainfortran.f'에서 'mainfortran.o'(>> gfortran -c mainfortran.f)로 컴파일 한 다음 'mypython_func.py'에서 'mypython_func.o'로 컴파일하고 'mainfortran.f'에서 컴파일 한 다음이 파일을 링크 (> > gfortran -c mainfortran.o mypython_func.o -o myexec.exe). 이게 가능합니까?

시간을내어 도와 주셔서 감사합니다.

빈스

답변

6

컴파일 및 번역에 많은 시간을 낭비하지 마십시오. 이 작업을 수행.

  1. Fortran Part 1 프로그램은 Python이 수행 할 파일을 작성합니다. stdout에 쓰십시오. 이 F1을 호출

  2. 파이썬은 파일을 읽습니다, 파이썬 계산 않습니다, 포트란에 대한 파일에 응답을 써주세요. 이것을 P.라고 부릅니다.

  3. Fortran Part 2 프로그램은 stdin에서 파일을 읽습니다. 이것들은 파이썬 계산의 결과입니다.

그들을

F1 | python p.py | F2 

당신은 아무것도 다시 컴파일하지 않는 연결합니다. 또한 세 개 모두 동시에 실행되므로 속도가 상당히 빨라질 수 있습니다.

파이썬의 중간 비트는 다음과 같아야합니다.

import sys 
import my_python_module 
for line in sys.stdin: 
    x, y, p, q = map(float, line.split()) 
    print ("%8.3f"*6) % (x, y, z, p, q, my_python_module.some_function(x, y, p, q)) 

표준 입력을 읽고 포트란 친화적 인 형식으로 표준 출력을 기록하는 기능의 주위에 간단한 래퍼.

+0

위대한, 나는 그것을 시도 할 것이다. 고맙습니다. –

4

@ S.Lott의 해결책은 갈 길입니다. 그러나 귀하의 질문에 대답 --- 그렇습니다, 그것은 포트란에서 파이썬을 호출하는 것이 가능합니다. 우선 Cython의 C API를 사용하여 파이썬을 노출 한 다음 iso_c_binding 모듈을 사용하여 C 함수에 대한 포트란 인터페이스를 작성하고 마침내 Fortran에서 호출합니다. 그것은 매우 헤비급이고 가치가없는 가장 실질적인 문제 (파이프 접근 방식을 사용합니다.)가 가능합니다 (그것은 저에게 효과적이었습니다).

관련 문제