登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> 程序员学前班[不再更新,只读] >> 主题: c++调用python完整代码(开发环境vs2008)     [回主站]     [分站链接]
标题
c++调用python完整代码(开发环境vs2008)
clq
浏览(0) + 2010-05-06 00:16:08 发表 编辑

关键字:

[2024-04-30 04:11:39 最后更新]
c++调用python完整代码(开发环境vs2008)

http://blog.csdn.net/v2x222/archive/2010/03/28/5421974.aspx

clq
2010-5-6 0:16:59 发表 编辑

// python_c++_test.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

//#include "Python_h/Python.h"
/************************************************************************/
/* 运 行函数
/*  PyAPI_FUNC(int) PyRun_AnyFileFlags(FILE *, const char *, PyCompilerFlags *);
/* PyAPI_FUNC(int) PyRun_AnyFileExFlags(FILE *, const char *, int, PyCompilerFlags *);
/* PyAPI_FUNC(int) PyRun_SimpleStringFlags(const char *, PyCompilerFlags *);
/* PyAPI_FUNC(int) PyRun_SimpleFileExFlags(FILE *, const char *, int, PyCompilerFlags *);
/* PyAPI_FUNC(int) PyRun_InteractiveOneFlags(FILE *, const char *, PyCompilerFlags *);
/* PyAPI_FUNC(int) PyRun_InteractiveLoopFlags(FILE *, const char *, PyCompilerFlags *);                                                                     */
/************************************************************************/
#ifdef WIN32
 #include "Python_h/Python.h" //windows平台下
#else
 #include "/usr/src/Python-2.4/Include/Python.h"  //linux平台下
#endif

int _tmain(int argc, _TCHAR* argv[])
{
 PyObject *pName,*pModule,*pDict,*pFunc,*pArgs,*pValue;
 Py_Initialize();
 // 设置环境变量
#ifdef WIN32
 PyRun_SimpleString("import sys");//python执行字符串
 PyRun_SimpleString("sys.path.append('./Python_script')");
//  PyRun_SimpleString("import os");
//  PyRun_SimpleString("import string");

#endif 
 //加载模块
 pModule=PyImport_ImportModule("aaa");
 //pArgs=PyObject_CallMethod(pModule,"max","ii",2,3);
 
 //获取函数
 pFunc=PyObject_GetAttrString(pModule,"max");
 // 调用函数
 pArgs=PyObject_CallFunction(pFunc,"ii",10,80);

 printf("%d",PyLong_AsLong(pArgs));
 Py_Finalize();

 /************************************************************************/
 /* 以下是另一种加载python模块的方法
 //pName=PyString_FromString("test");
 //pModule=PyImport_Import(pName);

 //pDict = PyModule_GetDict(pModule);

 //pFunc = PyDict_GetItemString(pDict, "max");

 ////参数进栈
 //pArgs=PyTuple_New(2);
 ////设置参数值
 //PyTuple_SetItem(pArgs, 0, Py_BuildValue("i",10));
 //PyTuple_SetItem(pArgs, 1, Py_BuildValue("i",15));
 ////调用函数
 //pValue=PyObject_CallObject(pFunc, pArgs);
 //查找函数
 //pFunc = PyDict_ GetItemString_r(pDict, "max");


                                                                     */
 /************************************************************************/
 return 0;
}


clq
2010-5-6 0:24:37 发表 编辑

http://hi.baidu.com/zengfazhou/blog/item/7ad51b120b1eaf8b6438db56.html
--------------------------------------------------

C++中嵌入Python
2010-01-17 16:48

最近项目开发中需要在C++嵌入Python,在C++中嵌入Python能弥补C++本 身的一些缺点,
提高程序灵活性,好处还是很多的。

1、安装Python
1.1 在 Windows上安装Python:
      直接去www.python.org/ 网站下载一个安装包python-2.5.1.msi(最新版本),双击安装文件就可以了。
1.2 在linux上安装Python:
      在linux上开发,最好去http://www.python.org/ftp/python/ 下载原码,
     通过原码安装需要执行configure, make, make install几个步骤,我下载安装的是python-2.4.tgz 。


2、开发的前期工作
      在win32环境,在VC Directories中加入Python安装后的Lib和Include;
      在linux环境 Lib和Include是通过gcc指定。


3.编写Python脚本
   Python函数的编写不难,可以用文本编辑器,也可以用IDLE (Python官方提供)。
   下面是一个简单的2个数相加的python脚本:
def PyAdd(x, y)
    nSum = x + y
    print "Sum = ", nSum
    return nSum

4. C++中调用嵌入的Python脚本
4.1 引入头文件
      win32/linux需要引入Python头文件
      ifdef WIN32
              #include "Python.h"
      #else
              #include "/usr/src/Python-2.4/Include/Python.h"
      #endif

4.2 C++调用Python前需要初始化,程序结束前要关闭Python
        初始化Python     Py_Initialize();

        关闭Python          Py_Finalize();

4.3 linux环境需要在Py_Initialize后引入python库的代码
    #ifndef WIN32
        PyRun_SimpleString("import sys");
        PyRun_SimpleString("sys.path.append('./')");
        PyRun_SimpleString("import os");
        PyRun_SimpleString("import string");
    #endif
 具体引入什么库根据需要定。

4.4 C++嵌入Python的准备工作做好后的C++编程
       为了调用Python函数扩展性比较好,特写了一个CallPyFunction函数,通过它
     调用Python函数,Python脚本文件名,函数名,参数都有CallPyFunction外传入,
    下面代码为CallPyFunction的核心代码,代码中未包含错误处理

     int CallPyFunction(const char *pszModuleName,
                                       const char *pModulFuncName,
                                        const char *pParam[],
                                        const int nCount)
     {
            PyObject *pName = NULL;
            PyObject *pModule = NULL;
            PyObject *pDict = NULL;
            PyObject *pFunc = NULL;
            PyObject *pParams = NULL;
             PyObject *pCurrParam = NULL;
            int i = 0;

            pName = PyString_FromString(pszModuleName);
            pModule = PyImport_Import(pName);
            pDict = PyModule_GetDict(pModule);
            pFunc = PyDict_GetItemString(pDict, pModulFuncName);
            pParams = PyTuple_New(nCount);
            i = 0;
            while (i < nCount)
            {
                   pCurrParam = PyString_FromString(pParam[i]);
                    PyTuple_SetItem(pParams, i, pCurrParam);
                    i++;
             }
             PyObject *pFtp= PyObject_CallObject(pFunc, pParams);

             return true;
     }

5.makefile
  在linux上嵌入Python后,makefile需要加入include和lib,具体如下
         PYTHON_HOME=/usr/src/Python-2.4
         PYTHON_LIBDIR=-L$(PYTHON_HOME)
         PYTHON_INCLUDE=-I$(PYTHON_HOME)
         PYTHON_INCLUDE2=-I$(PYTHON_HOME)/Include
 Include 和Lib的路径根据实际的安装路径设置,在linux上python安装后,引入的.h文件有的在PYTHON_HOME,也有的在Include,需要 引入2个路径。

 gcc 编译选项加上如下参数
 $(PYTHON_INCLUDE)   $(PYTHON_INCLUDE2)   $(PYTHON_LIBDIR) -lpython2.4 -ldl -lpthread -lutil -lm -Xlinker -export-dynamic



guest
2024-01-30 01:25:31 发表 编辑

ip: 89.22.234.115
Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.66 Safari/537.36

guest
2024-01-30 01:34:56 发表 编辑

ip: 193.188.21.49
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36

guest
2024-03-17 06:52:54 发表 编辑

ip: 89.22.235.136
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Iron Safari/537.36


总数:5 页次:1/1 首页 尾页  
总数:5 页次:1/1 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1