2011-02-28 5 views
1

내 C++ 라이브러리를 Python으로 가져올 때 InitGoogleLogging()을 호출해야합니다. 내 C++ 라이브러리는 Boost.Python을 사용합니다.모듈 가져 오기 boost.python 코드

라이브러리를 가져올 때 함수를 어떻게 호출합니까?

답변

5

파이썬에는 실제 "정의"가 없습니다. .py 모듈에 입력 한 코드는 이 입력되면이 실행 된 입니다. 패키지 파일에 코드를 넣는 대부분의 시간은 클래스 또는 과 같은 "definiton"코드 일뿐입니다. 실제로이 코드는 여전히 실행되고 클래스와 함수 정의가 결과로 생성됩니다. 모듈의 루트 네임 스페이스 (들여 쓰기)에서 함수를 호출하면 모듈이로드 되 자마자 호출됩니다.

그냥 __init__.py에 넣으십시오. 별칭을 사용하여 패키지를 내 보낸 다음 .py에 네임 스페이스를 플랫 화하는 방법에 대해 설명하는 http://www.boost.org/doc/libs/1_45_0/libs/python/doc/tutorial/doc/html/python/techniques.html#python.extending_wrapped_objects_in_python을 참조하십시오.

from _foo import * 

InitGoogleLogging() 

가 또 다른 대안은 C++ 래퍼 모듈에서 직접 호출 :

BOOST_PYTHON_MODULE(foo) 
{ 
    InitGoogleLogging(); 

    class_<Foo>("Foo") 
     .def("bar", &bar) 
    ; 
} 
+0

감사를

즉, (이 AA 하위 디렉토리에 __init__.pyfoo는라는 것) 제비. 나는 두 번째 해결책을 좋아하지만 argv에 가야한다. boost :: python이 argv에 접근 할 수있는 방법을 제공합니까? 아마도 sys.argv [0]라고 부를 수 있을까요? –

+0

응용 프로그램에 대한 argv를 의미합니까? 당신이 그렇다면, 그렇습니다. –

+0

@aleksey : 알아. 내 C++ 코드에서 sys.argv [0]을 어떻게 얻을 수 있습니까? –

관련 문제