2013-07-02 2 views
1

Python.h을 사용하여 C++ 프로그램에서 Python 스크립트를 실행하려고합니다. 이 C++ 프로그램은 (make install) /usr/bin에 설치할 수 있기 때문에 Python 스크립트를 자체 디렉토리 (설치되지 않은 경우) 또는 PATH 환경 변수 디렉토리 중 하나에서 찾을 수 있어야합니다.C++의 PATH에서 Python 스크립트 가져 오기

나는 일을 시도 :

PyObject *pName = PyString_FromString(scriptName); // scriptName is "file.py" as a char* 
PyRun_SimpleString("import sys"); 
PyRun_SimpleString("sys.path.append(\".\")"); 
PyObject *pModule = PyImport_Import(name); // not working because absolute path only 
              //since Python 2.7 ? 

PyRun_SimpleString("import sys"); 
PyRun_SimpleString("sys.path.append(\".\")"); 
PyObject *pModule = PyImport_ImportModuleEx(scriptName, NULL, NULL, NULL); 

그러나 모두가이 호출 후 pModule == NULL로 날 떠나하지만 자신의 디렉토리에서 C++ 모듈을 실행하면 작동합니다.

주셔서 감사합니다 C의 ++ 파이썬 스크립트의 루트 디렉토리 이 프로세스의 현재 작업 디렉토리 경우에만 파이썬 스크립트에 대한 경로로 당신의 도움을 많이

+0

몇 가지 질문 : 1) 응용 프로그램이 python 스크립트가 포함 된 디렉토리에서 실행됩니까? 2) Py_Initialize 전에 PySys_SetArgvEx를 호출 해 보았으며 응용 프로그램 경로를 설정 했습니까? –

+0

1) 물론'make '는 C++ 실행 파일을 Python 스크립트가 위치한 디렉토리에 넣습니다. 'make install'은 C++ 실행 파일과 Python 스크립트를'usr/bin' (또는 사용자가 설치하고자하는 곳)에 복사합니다. 2) 나는 C++ 프로그램의이 부분이'main'과 원래 argc' 및'argv' 변수에서 상당히 떨어져 있기 때문에 대부분 그렇지 않습니다. 응용 프로그램 경로를 설정하려면 그렇게해야합니까? – wrousseau

답변

2

"." 작품.

프로그램이 다른 곳에서 시작 된 경우 스크립트를 확인하는 신뢰할 수있는 유일한 방법 (PATH를 통해 하나 또는로/경로 /로/A/프로그램)을 는 main에서 argv[0] PARAM를 사용하는 사용하는 것입니다.

올바른 경로를 찾으면, 그것을 사용하는 두 가지 방법이 있습니다 : sys.path.append

  • 스위치 작업 디렉토리에

    1. 패스가가 다음 chdir (unistd.h에서)를 사용하고 "."sys.path.append에 전달할 수 있습니다. chdir은 전체 프로세스에 영향을 미치지 만, 전문가는 main에서 직접 처리 할 수 ​​있습니다.
  • +0

    그게 내가 두려워하는 것, 내가 읽은 것에서, argv [0]을 연구하는 것은 완전히 신뢰할만한 일이 아니다. 그러나 분명한 대답을 가져 주셔서 감사합니다! – wrousseau