Peng Lv

毋意,毋必,毋固,毋我。 言必行,行必果。

导航

Python嵌入C++

python是一门非常优秀而且优雅的语言,没有了分号和大括号的烦恼,是你在开发中不用再担心大括号匹配问题和语句结束分号遗漏的麻烦,好了,切入正题,本题谈的是如何将python嵌入到C++中去,让你的c++程序更上一层楼!
    1.安装python,去www.python.org下一个python 2.x和3.x的都行。
   2.首先要设置库文件,将python内目录下的include和lib包含进库文件和库包含中。
   好了,我们开始工作了,先看一个小程序:

#include<python.h>
#include
<iostream>
using namespace std;
int main()
{
Py_Initialize();
/* 初始化python解释器*/
PyRun_SimpleString(
"print 'hello world!'"); /* 调用python语句*/
Py_Finalize();
/*结束python解释器,释放资源*/
}

运行之后,将会在控制台程序下输出hello world!
这就是我们的第一个程序,其中第一行和第三行是必须的,让我们来看看更多的代码,这是在c++程序中调用python脚本中的函数:
我们先写一个脚本:
___def helloworld():
_______print 'hello world!'
然后保存为first.py文件到当前工程下的目录,代码如下:

#include<python.h>
int main()
{
  PyObject* p_module = NULL;
  PyObject
* p_func = NULL;
  Py_Initialize();
/* Python解释器初始化 */
   p_module = PyImport_ImportModule("first");
  p_func
= PyObject_GetAttrString(p_module, "hello");
  PyEval_CallObject(p_func, NULL);
  Py_Finalize();
/* 结束Python解释器,释放资源 */
   return 0;
}

 

 


PyImport_ImportModule()是导入脚本的文件,参数是文件名
PyObject_GetAttrString()是从你import的文件中找到指定的函数
PyEval_CallObject()是调用你的函数,其中NULL部分为函数的参数。
运行后,你将会看到hello world! 字符串。
你也可以使用PyRun_SimpleString("execfile('first.py')"); 来执行脚本文件,其中execfile是什么意思我就不多说了吧?可以去开手册。

好了,先写到这里了,还有高级的主题以后再说了。。。

posted on 2010-02-03 22:52  Lvpengms  阅读(1609)  评论(0编辑  收藏  举报