程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言調用PYTHON腳本-2

C語言調用PYTHON腳本-2

編輯:關於C語言

C語言調用PYTHON腳本-2 python代碼二段:   call.py def test():     print 'hello world'     def add(a,b):     return a + b   api.py import io   def load_test():     fp = open('call.py','r')     buffer = ''     if fp:         buffer = fp.read()     fp.close()     return buffer   cpp代碼: #include <stdio.h> #include <stdlib.h> #include <Python.h>   int main(int argc, char *argv[]) {     Py_Initialize();       if(!Py_IsInitialized())        {           return -1;       }            PyRun_SimpleString("import sys");     PyRun_SimpleString("sys.path.append('./')");     PyObject* pName;     PyObject* pModule;     PyObject* pDict;     PyObject* pFunc;          pName = PyString_FromString("api");     pModule = PyImport_Import(pName);     if(!pModule)     {         printf("can't find call.py");         getchar();         return -1;     }          pDict = PyModule_GetDict(pModule);     if(!pDict)     {         return -1;     }          {         pFunc = PyDict_GetItemString(pDict,"load_test");         if(!pFunc || !PyCallable_Check(pFunc))         {             printf("can't find function [test]");             getchar();             return -1;         }                  PyObject *pFn = PyObject_CallObject(pFunc,0);         char* buffer = PyString_AsString(pFn);         printf("%s\n",buffer);                  PyObject* o = Py_CompileString(buffer,"none",Py_file_input);         PyObject* m = PyImport_ExecCodeModule("a.a",o);         PyObject* d = PyModule_GetDict(m);         pFunc = PyDict_GetItemString(d,"add");         if(!pFunc || !PyCallable_Check(pFunc))         {             printf("can't find function [add]");             getchar();             return -1;         }                  PyObject* args = PyTuple_New(2);         PyTuple_SetItem(args,0,Py_BuildValue("l",3));         PyTuple_SetItem(args,1,Py_BuildValue("l",4));         PyObject *pAdded = PyObject_CallObject(pFunc,args);         int ret = PyInt_AsLong(pAdded);           printf("add value:%d\n",ret);         }       Py_Finalize();         system("PAUSE");         return 0; }   這段代碼和上一篇有點區別 主要區別是從從內存載入python模塊然後調用函數 主要部分是這塊:         PyObject* o = Py_CompileString(buffer,"none",Py_file_input);         PyObject* m = PyImport_ExecCodeModule("a.a",o);         PyObject* d = PyModule_GetDict(m); buffer是python源碼字符串  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved