2013-07-02 58 views
1

我試圖在使用Python.h的C++程序中運行Python腳本。因爲這個C++程序可以安裝在/usr/bin中(make install),所以它需要能夠在它自己的目錄(如果沒有安裝)或者在PATH環境變量的目錄之一中找到Python腳本。從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++模塊工作。

非常感謝您的幫助

+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

"."作品到您的Python腳本的路徑只有當你的C++ Python腳本的根目錄 是你的流程的當前工作目錄

(通過PATH或/路徑/到/ A /程序) 那麼如果你的程序是從別的地方開始的唯一可靠的方式找到你的腳本是用用你的argv[0] PARAM從main

一旦你找到了正確的道路,有兩種方法來使用它:

  1. 它傳遞給sys.path.append
  2. 開關工作目錄有使用chdir(從unistd.h中),然後你可以通過"."sys.path.appendchdir將影響整個過程,但優點是您可以直接在main中執行此操作。
+0

這就是我所害怕的,從我讀的內容來看,研究argv [0]不是一個完全可靠的事情......但是,謝謝你的明確答案! – wrousseau