C++ 扩展和嵌入 Python

转载 2013年10月22日 10:38:42




http://wenku.baidu.com/view/01fa40116edb6f1aff001fce.html























































BOOST_PYTHON_MODULE(pyUtil) { 
    def("Recognise", Recognise); } 
所有示例都在Microsoft Windows XP Professional + Microsoft Visual 
Studio .NET 2003 + Python2.4环境下测试通过,本文所用的Boost库为1.33版本。   
参考资料  
 [1] Python Documentation Release 2.4.1. 2005.3.30,如果您以默认方
式安装了Python2.4,那么该文档的位置在C:\Program Files\Python24\Doc\Python24.chm;  
 [2] Michael Dawson. Python Programming for the Absolute Beginner. 
Premier Press. 2003;  
 [3] Mark Lutz. Programming Python, 2nd Edition. O''Reilly. 2001.3 ;   [4] Mark Hammond, Andy Robinson. Python Programming on Win32. 
O''Reilly. 2000.1 ;  
 Python主页:http://www.python.org;   Boost库主面:www.boost.org;  
附1 text.txt 
this is test text in text.txt. 附2 mymod.py import string 
message = ''original string'' message =message+message msg_error="" try: 
       text_file = open("text.txt", "r")        whole_thing = text_file.read() 
       print whole_thing        text_file.close() 
except IOError, (errno, strerror): 
       print "I/O error(%s): %s" % (errno, strerror) def transform(input): 
    #input = string.replace(input, ''life'', ''Python'')     return string.upper(input)  def change_msg(nul):    












    global message #如果没有此行,message是函数里头的局部变量     message=''string changed''     return message def r_file(nul): 
    return whole_thing def get_msg(nul): return message  
附3 simplepy.h 
#ifndef _SIMPLEPY_H_ #define _SIMPLEPY_H_ 
// simplepy.h v1.0 
// Purpose: facilities for Embedded Python. // by hujinshan @2005年9月2日9:13:02 #include  
using std::string; #include  
//-------------------------------------------------------------------- 
// Purpose: ease the job to embed Python into C++ applications // by hujinshan @2005年9月2日9:13:18 
//-------------------------------------------------------------------- 
class CSimplepy // : private noncopyable { 
public: 
    ///constructor     CSimplepy()     { 
        Py_Initialize(); 
        pstr=NULL, pmod=NULL, pdict=NULL;         pfunc=NULL, pargs=NULL;     } 
    ///destructor 
    virtual ~CSimplepy()         {    
        Py_Finalize();     } 












    ///import the user module 
    bool ImportModule(const char* mod_name)     { 
        try{ 
            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

利用C++ Boost编写扩展Python模块

Python很强大,但已有的模块可能满足不了人民日益增长的物质文化需求,于是有时需要编写扩展模块进行完善。 可行的方案有很多:SWIG、Weave、ctypes、BOOST…… BOOST...
  • normallife
  • normallife
  • 2016年09月16日 17:40
  • 1701

用C语言扩展Python的功能

Pyton和C分别有着各自的优缺点,用Python开发程序速度快,可靠性高,并且有许多现成模块可供使用,但执行速度相对较慢;C语言则正好相反,其执行速度快,但开发效率低。为了充分利用两种语言各自的优点...
  • liangzhao_jay
  • liangzhao_jay
  • 2015年04月10日 10:20
  • 1313

C++ 扩展和嵌入 Python

C++ 扩展和嵌入 Python 作者:胡金山 下载源代码 Python简介   Python是一种简单易学,功能强大的解释型编程语言,它有简洁明了的语法,高效率的高层数据结构,能...
  • cedricporter
  • cedricporter
  • 2011年09月23日 18:33
  • 439

C++ 扩展和嵌入 Python

Python简介   Python是一种简单易学,功能强大的解释型编程语言,它有简洁明了的语法,高效率的高层数据结构,能够简单而有效地实现面向对象编程,特别适用于快速应用程序开发,也可以用来开发...
  • doudou745
  • doudou745
  • 2012年03月16日 10:35
  • 333

Python C c++扩展

  • 2017年11月17日 11:20
  • 327KB
  • 下载

C++扩展Python源码

  • 2010年03月14日 18:46
  • 108KB
  • 下载

使用C++扩展python

  • 2017年07月05日 10:53
  • 439KB
  • 下载

C++ 扩展python

  • 2011年08月18日 11:51
  • 62KB
  • 下载

c++扩展 python手册

  • 2012年09月14日 14:25
  • 338KB
  • 下载

python扩展c++示例

  • 2017年10月26日 11:20
  • 25.4MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ 扩展和嵌入 Python
举报原因:
原因补充:

(最多只允许输入30个字)