반응형
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
반응형
'파이썬' 카테고리의 다른 글
파이썬 C ++ 개발자를위한 Python (0) | 2020.11.16 |
---|---|
파이썬 boto3를 사용하여 ec2 인스턴스를 생성하는 방법 (0) | 2020.11.16 |
파이썬에서 SQL 테이블을 JSON으로 반환 (0) | 2020.11.16 |
파이썬 Cron 및 virtualenv (0) | 2020.11.16 |
파이썬 Python을 사용하여 Google 문서 도구에서 스프레드 시트 다운로드 (0) | 2020.11.16 |
댓글