본문 바로가기
파이썬

파이썬 C / C ++에서 파이썬 메서드 호출 및 반환 값 추출

by º기록 2020. 11. 16.
반응형

C에서 파이썬 모듈에 정의 된 사용자 지정 함수를 호출하고 싶습니다.이를 수행하기위한 몇 가지 예비 코드가 있지만 출력을 stdout에 인쇄합니다.

mytest.py

import math

def myabs(x):
    return math.fabs(x)

test.cpp

#include <Python.h>

int main() {
    Py_Initialize();
    PyRun_SimpleString("import sys; sys.path.append('.')");
    PyRun_SimpleString("import mytest;");
    PyRun_SimpleString("print mytest.myabs(2.0)");
    Py_Finalize();

    return 0;
}

반환 값을 C double로 추출하여 C에서 어떻게 사용할 수 있습니까?

 

해결 방법

 

앞에서 설명한 것처럼 PyRun_SimpleString을 사용하는 것은 나쁜 생각 인 것 같습니다.


서론을 읽는 것은 그것이 작동하는 방식을 이해하기 위해 가장 먼저해야 할 일입니다.

먼저 C API의 기본 객체 인 PyObject에 대해 배워야합니다. 모든 종류의 파이썬 기본 유형 (string, float, int, ...)을 나타낼 수 있습니다.

예를 들어 파이썬 문자열을 char *로 또는 PyFloat를 double로 변환하는 많은 함수가 있습니다.

먼저 모듈을 가져옵니다.

PyObject* myModuleString = PyString_FromString((char*)"mytest");
PyObject* myModule = PyImport_Import(myModuleString);

그런 다음 함수에 대한 참조를 가져옵니다.

PyObject* myFunction = PyObject_GetAttrString(myModule,(char*)"myabs");
PyObject* args = PyTuple_Pack(1,PyFloat_FromDouble(2.0));

그런 다음 결과를 얻으십시오.

PyObject* myResult = PyObject_CallObject(myFunction, args)

그리고 다시 두 배로 :

double result = PyFloat_AsDouble(myResult);

분명히 오류를 확인해야합니다 (Mark Tolonen이 제공 한 링크 참조).

질문이 있으시면 주저하지 마십시오. 행운을 빕니다.

 

참조 페이지 https://stackoverflow.com/questions/3286448

 

 

반응형

댓글