나는 파이썬 코드를 앱에 삽입하기 위해 boost :: python을 사용하고 있습니다. print 문이나 다른 표현식을 제대로 평가할 수 있었지만 모듈을 가져 오려고하면 가져 오기가되지 않아 응용 프로그램이 종료되었습니다. 또한 임베디드 코드에서 globals() 함수 호출도 런타임 오류를 발생시킵니다. 여기boost :: python embedded python 코드에서 모듈을 어떻게 가져 옵니까?
#include <boost/python.hpp>
using namespace boost;
using namespace boost::python;
using namespace boost::python::api;
int main(void) {
Py_Initialize();
object main_module = import("__main__");
object main_namespace = main_module.attr("__dict__");
main_namespace["urllib2"] = import("urllib2");
object ignored = exec(
"print 'time'\n", main_namespace);
}
가, 내가 부스트 가져 오기 기능을 사용하여 urllib2가 가져올 시도했습니다,이 컴파일하고 제대로 실행되지만 다음과 같은 임원 문, 에러를 제공합니다.
object ignored = exec(
"print urllib2\n"
"print 'time'\n", main_namespace);
또는 부스트 가져 오기 기능을 제거하고 포함 된 코드에서 가져 오기를 수행하면 오류가 발생합니다. try : except : 블록을 사용해 보았지만 그 중 하나는 작동하지 않습니다. 이것은 C++ 응용 프로그램이 urllib2 py 모듈 또는 다른 위치를 찾을 수 없기 때문입니까? 가져 오기 전에 모듈의 경로를 설정하는 방법이 있습니까?
이것은 내부 용으로 만 제작되었으므로 경로를 하드 코딩 할 수 있습니다.
편집 : 추가 정보 :
이 일어나는 것입니다. try ... catch를 수행하고 예외가 발생하면 PyErr_Print()를 호출하여 모듈 가져 오기 또는 함수 호출이있을 때 항상 오류로 처리합니다. 오류 메시지 :
Traceback (most recent call last):
File "<string>", line 1, in <module>
TypeError: 'NoneType' object does not support item assignment
아무 이유없이 생각할 수 있습니까? 당신이 이미하지 않은 경우
@Jonas. 그걸로 무엇을하고 싶니? –
오. 나는 C++ 소켓 라이브러리에 완전히 지쳤다. 그들은 이해할 시간이 필요하며, 나는 컴퓨터 학생이 아니기 때문에, 이해하는 데 오랜 시간이 걸린다. 그래서 저는 비동기 urllib ++와 같은 느낌의 것을 비단뱀 urllib2와 함께 작성했습니다. : D 나는 그것이 미친 소리가 나는 것을 안다. 하지만 지금은 매우 편리한 솔루션이 있습니다! – Sahas
안녕하세요, 당신에게 좋습니다! –