C/C++中如何調用Python方法

C/C++對Python的調用層次可以分爲三個層次, (1) 高層次的調用, (2)純Python調用, (3) Python方法的擴展(也就使向Python輸出調用函數). 這裏我主要討論(1)和(2)兩種方法.

1 高層次的調用

這是最簡單的一種在C/C++中調用Python的方法. 它直接的調用Python提供的C調用接口函數, 這些函數主要有: PyRun_SimpleString(), PyRun_SimpleStringFlags(), PyRun_SimpleFile(), PyRun_SimpleFileEx()和PyRun_SimpleFileExFlags()幾個. 函數的具體用法參考Python的文檔.
    這裏舉個例子來說明這種層次的用法:

 由這個例子可見, 在C/C++中調用Python的內容非常簡單, 只要構造一個簡單的Python調用字符串.這裏要注意的就是, Python調用串語句之間要用'/n'來分開, 且語句之間不能有空格, 如上面的Python字符串不能寫成: "import sys/n print sys.path" , 否則要出錯的.

 
 // c/c++ 中 Python 調用必須的頭文件
 #include <Python.h>

 //
 int main(int argc, char* argv[])
 {
 // 初始化Python解析環境
 Py_Initialize();

 // 構造Python執行腳本
 char szPyScript[128];
 sprintf(szPyScript, "import sys/nprint sys.path");
 if(PyRun_SimpleString(szPyScript) != 0)
 {
  sprintf(stderr, "execute /'%s/'failed!", szPyScript);
  return -1;
 }
 
 // 清除Python解析環境
 Py_Finalize();
 }

 //

 

 //
 以上的例子也表明了在C/C++中調用Python的基本結構, 就是
 (1) 先初始化Python環境然: Py_Initialize()
 (2) 具體對Python的操作
 (3) 清除Python環境

  更復雜的一個使用高層調用的例子, 這個例子用PyRun_SimpleFile的例子.

  這裏值得注意是, 在Window中:
 (1) 鏈接debug版本的時候會自動鏈接PythonXX(_d).lib庫, PythonXX_d安裝時是沒有安裝的, 所以要顯示的指定鏈接PythonXX.lib庫, 不知道VC6.0爲什麼還會去找PythonXX_d.lib, 在vs7.0不會.
 (2) 編譯時要以 /MD(多線程DLL) 選項編譯(不論時debug版本還時release版本都一樣).
 
 以上我在VC7.0中可以正確的運行, 在VC6.0這樣還不行, 可能和我使用的版本有關係(我用的版本是:Python24.lib). 有知道的請賜教!!

// c/c++ 中 Python 調用必須的頭文件
 #include <Python.h>

 //
 int main(int argc, char* argv[])
 {
 // 初始化Python解析環境
 Py_Initialize();

 //
 char szFile[] = "PyFile.py";
 //sprintf(szPathFile, "%s//%s", szPath, szFile);
 FILE* fp = fopen(szFile, "r");
 if(PyRun_SimpleFile(fp, szFile) != 0)
 {
  fclose(fp);
  sprintf(stderr, "PyRun_SimpleFile(%s) failed!", saFile);
  return -1;
 }
 fclose(fp);
 
 // 清除Python解析環境
 Py_Finalize();
 }

 

2 純Python調用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章