分享

开发Python模块的C语言扩展 python c语言模块

 羊玉wngbx 2024-03-22 发布于云南
1 #include <string> 2 #include <iostream> 3 #include <Python.h> 4 5 //Python c api使用方法 6 7 using namespace std; 8 9 string GetPyFun(string s1,string s2) 10 { 11 // void Py_Initialize( ) 12 //初始化Python解释器,在C++程序中使用其它Python/C API之前,必须调用此函数,如果调用失败,将产生一个致命的错误 13 Py_Initialize(); 14 15 //定义变量 16 PyObject * pModule = NULL; 17 PyObject * pFunc = NULL; 18 PyObject * pArg = NULL; 19 PyObject * result; 20 char *resultStr = ""; 21 22 //int PyRun_SimpleString( const char *command) 23 //直接执行一段Python代码,就好象是在__main__ 函数里面执行一样。 24 //PyRun_SimpleString("import sys"); 25 //PyRun_SimpleString("sys.path.append('C:\\Documents and Settings\\Administrator\\My Documents\\Visual Studio 2005\\Projects\\hello\\hello')"); 26 27 //PyObject* PyImport_ImportModule(char *name) 28 //导入一个Python模块,参数name可以是*.py文件的文件名。相当于Python内建函数__import__() 29 pModule =PyImport_ImportModule("hello");//这里是要调用的文件名 30 31 //PyObject* PyObject_GetAttrString(PyObject *o, char *attr_name) 32 //返回模块对象o中的attr_name属性或函数,相当于Python中表达式语句:o.attr_name 33 pFunc= PyObject_GetAttrString(pModule, "Hello"); 34 35 //PyObject* Py_BuildValue( char *format, ...) 36 //format以tuple的形式指定,一个参数就是(i) 37 //构建一个参数列表,把C类型转换为Python对象,使Python可以使用C类型数据 38 pArg= Py_BuildValue("(s,s)", s1.c_str(),s2.c_str()); 39 40 //pParm = PyTuple_New(2); 41 //PyTuple_SetItem(pParm, 0, Py_BuildValue("s", csEntity)); 42 //PyTuple_SetItem(pParm, 1, Py_BuildValue("s", csEntity)); 43 44 //PyObject* PyEval_CallObject(PyObject* pfunc, PyObject* pargs) 45 //用于调用Python函数 46 //此函数接受两个PyObject*形参 47 //pfunc是要被调用的Python函数,通常可由PyObject_GetAttrString获得 48 //pargs是函数的参数列表,通常可由Py_BuildValue获得 49 result = PyEval_CallObject(pFunc, pArg); 50 51 //int PyArg_Parse( PyObject *args, char *format, ...) 52 //解构Python数据为C的类型,这样C程序中才可以使用Python里的数据。 53 PyArg_Parse(result, "s", &resultStr); 54 55 //关闭Python解释器,释放解释器所占用的资源 56 Py_Finalize(); 57 return resultStr; 58 } 59 60 int Walk(const string& s1,const string& s2) 61 { 62 // void Py_Initialize( ) 63 //初始化Python解释器,在C++程序中使用其它Python/C API之前,必须调用此函数,如果调用失败,将产生一个致命的错误 64 Py_Initialize(); 65 66 //定义变量 67 PyObject * pModule = NULL; 68 PyObject * pFunc = NULL; 69 PyObject * pArg = NULL; 70 PyObject * result; 71 int reVal = 0; 72 73 //int PyRun_SimpleString( const char *command) 74 //直接执行一段Python代码,就好象是在__main__ 函数里面执行一样。 75 //PyRun_SimpleString("import sys"); 76 //PyRun_SimpleString("sys.path.append('C:\\Documents and Settings\\Administrator\\My Documents\\Visual Studio 2005\\Projects\\hello\\hello')"); 77 78 //PyObject* PyImport_ImportModule(char *name) 79 //导入一个Python模块,参数name可以是*.py文件的文件名。相当于Python内建函数__import__() 80 pModule =PyImport_ImportModule("walkdir");//这里是要调用的文件名 81 82 //PyObject* PyObject_GetAttrString(PyObject *o, char *attr_name) 83 //返回模块对象o中的attr_name属性或函数,相当于Python中表达式语句:o.attr_name 84 pFunc= PyObject_GetAttrString(pModule, "list_dir"); 85 86 //PyObject* Py_BuildValue( char *format, ...) 87 //format以tuple的形式指定,一个参数就是(i) 88 //构建一个参数列表,把C类型转换为Python对象,使Python可以使用C类型数据 89 pArg= Py_BuildValue("(s,s)", s1.c_str(),s2.c_str()); 90 91 //pParm = PyTuple_New(2); 92 //PyTuple_SetItem(pParm, 0, Py_BuildValue("s", csEntity)); 93

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多