2009-05-18 4 views
1

대 좀 C 코드 모듈 Pootle을 초기화하는 후PyImport_Import 수입

PyObject *obj = PyString_FromString("Pootle"); 
PyImport_Import(obj); 
Py_DECREF(obj); 

PyRun_SimpleString("import Pootle"); 

를 대체하기 위해 시도했습니다. 첫 번째는 Pootle이라는 이름을 후속 PyRun_SimpleString 호출에 사용할 수 있지만 두 번째 호출은 사용할 수없는 것 같습니다.

누군가 나에게 차이점을 설명해 주시겠습니까? C API 호출로 첫 번째 작업을 수행하는 방법이 있습니까? 이 프로그램의 다른 부분에 이러한 참조가 가능하지 않습니다 -

답변

3

모든 PyImport_Import 호출이 수행

감사 모듈에 대한 참조를 반환합니다. 따라서 새로 가져온 모듈을 PyRun_SimpleString에 표시하려면 수동으로 추가해야합니다.

PyRun_SimpleString__main__ 모듈 네임 스페이스에서 자동으로 작동합니다. 오류 검사 (NULL 반환에주의하십시오!)에 많은주의를 기울이지 않고도 일반적인 개요입니다.

PyObject *main = PyImport_AddModule("__main__"); 
PyObject *obj = PyString_FromString("Pootle"); 
PyObject *pootle = PyImport_Import(obj); 
PyObject_SetAttrString(main, "Pootle", pootle); 

Py_DECREF(obj); 
Py_XDECREF(pootle);