2011-09-02 3 views
6
나는 Documentation에 따라 C을위한 임베디드 파이썬을 사용하는 데 문제가

- 나는 수입 모듈을 사용하려고 할 때마다 나는 내려면 :임베드 파이썬 - 수입 모듈

PythonIncl.exe에서 0x1e089e85에서

처리되지 않은 예외 : 0xC0000005 : 액세스 위반 읽기 위치는 0x00000004입니다.

PyObject_GetAttrString() 메서드에서 오류가 발생하며 문서가별로 도움이되지 않습니다. 또한 IBM의 Example과 같은 자습서를 사용해 보았지만 항상 동일한 액세스 위반이 발생합니다.

다음은 내가 제대로 작동하지 않는 자습서 중 하나의 예제 코드입니다. 여기서 잘못된 점이 있습니까?

C-코드 (하나 개의 기본 파일) :

#include <Python.h> 
int main() 
{ 
    PyObject *strret, *mymod, *strfunc, *strargs; 
    char *cstrret; 
    Py_Initialize(); 
    mymod = PyImport_ImportModule("reverse"); 
    strfunc = PyObject_GetAttrString(mymod, "rstring"); 
    strargs = Py_BuildValue("(s)", "Hello World"); 
    strret = PyEval_CallObject(strfunc, strargs); 
    PyArg_Parse(strret, "s", &cstrret); 
    printf("Reversed string: %s\n", cstrret); 
    Py_Finalize(); 
    return 0; 
} 

파이썬 코드 (라는 파일 reverse.py에서, 동일한 폴더) :

def rstring(s): 
    i = len(s)-1 
    t = '' 
    while(i > -1): 
     t += s[i] 
     i -= 1 
    return t 

내가 사용하여 XP 머신을 실행하고 MSVS2008, Python 2.7

약간의 컨텍스트 : 상당히 큰 C 프로그램에서 OpenOPC를 사용하는 작은 파이썬 스크립트를 임베드하려고하고 있는데이 두 가지 사이에서 데이터를 전송하려고합니다. 그러나 나는 이미 기본 예제로 개념 증명 테스트에 실패했다.

+2

파이썬의 몸을 들여 줘야한다는 것을 알고 있습니까? – Griwes

+1

파이썬을 임베딩하기보다는 파이썬 확장을 작성하는 것이 거의 항상 더 좋고 강력합니다. 그렇게하는 것은 꽤 비슷해 보이지만, 확장을위한 더 나은 툴링이 있으며 필요한 경우 다른 Python 도구에 쉽게 액세스 할 수 있습니다. 확장 대 삽입에 대한 관점은 http://twistedmatrix.com/users/glyph/rant/extendit.html을 참조하십시오. –

+0

예, 누락 된 들여 쓰기에 대해 게시 중에 분실 한 경우 IDE에 표시됩니다. – Shorkaa

답변

14

PyImport_ImportModule 호출 결과 확인 : 실패하고 NULL을 반환합니다. 이는 기본적으로 현재 디렉토리가 검색 경로에 없기 때문입니다.

PySys_SetPath("."); // before .. 
mymod = PyImport_ImportModule("reverse"); 

을 추가하면 현재 디렉토리가 모듈 검색 경로에 추가되고 예제가 적용됩니다.

+0

'PySys_SetPath (".")'는 검색 경로를 지우거나 겹쳐 씁니다. 당신은 그것을 (http://stackoverflow.com/a/8859538/6394138) 더 잘 부탁드립니다. – Leon

2

오류를 확인하지 않고 진행 중이므로 코드가 이런 식으로 실패하는 것은 충격적입니다. 설명에서 mymodNULL 인 것처럼 들리지만 가져 오기 실패와 일치합니다. 실패한 가져 오기의 가능한 원인 중 하나는 게시 한 reverse.py에 구문 오류가 있다는 것입니다.