C++扩展和嵌入Python
作者 佚名技术
来源 程序设计
浏览
发布时间 2012-06-30
pmod = PyImport_ImportModule(const_cast(mod_name)); if(pmod==NULL) return false; pdict = PyModule_GetDict(pmod); } catch(...) { return false; } if(pmod!=NULL && pdict!=NULL) return true; else return false; } ///Executes the Python source code from command in the __main__ module. ///If __main__ does not already exist, it is created. ///Returns 0 on success or -1 if an exception was raised. ///If there was an error, there is no way to get the exception information. int Run_SimpleString(const char* str) { return PyRun_SimpleString(const_cast(str) ); } ///PyRun_String("message", Py_eval_input, pdict, pdict); ///Execute Python source code from str in the context specified by the dictionaries globals. ///The parameter start specifies the start token that should be used to parse the source code. ///Returns the result of executing the code as a Python object, or NULL if an exception was raised. string Run_String(const char* str) { char *cstr; pstr = PyRun_String(str, Py_eval_input, pdict, pdict); if(pstr==NULL) throw ("when Run_String, there is an exception was raised by Python environment."); PyArg_Parse(pstr, "s", &cstr); return string(cstr); } ///support olny one parameter for python function, I think it''''s just enough. string CallObject(const char* func_name, const char* parameter) { pfunc=NULL; pfunc = PyObject_GetAttrString(pmod, const_cast(func_name)); if(pfunc==NULL) throw (string("do not found in Python module for: ") +func_name).c_str(); char* cstr; pargs = Py_BuildValue("(s)", const_cast(parameter)); pstr = PyEval_CallObject(pfunc, pargs); if(pstr==NULL) throw ("when PyEval_CallObject, there is an exception was raised by Python environment"); PyArg_Parse(pstr, "s", &cstr); return string(cstr); } //PyObject *args; //args = Py_BuildValue("(si)", label, count); /* make arg-list */ //pres = PyEval_CallObject(Handler, args); protected: PyObject *pstr, *pmod, *pdict; PyObject *pfunc, *pargs; }; #endif // _SIMPLEPY_H_ // end of file |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: BIG5码到BG码转换技术下一篇: 调用虚拟函数、持续化视图状态及POD类型概念
关于C++扩展和嵌入Python的所有评论