http://wenku.baidu.com/link?url=AAISSxx5WwM-BEtKwpvqrw7Pobu8jWFWC2IBwcNd-UcR2UTdC2jEYv0CEdc5tw606sptCl6eSeFjhKC1_QXTB3B3lyIKRem2OunvtLsDoW
注意 命名为test.py,因为python自带test模组且优先级高于用户的,所以程序在系统的test.py中找不到我们定义的函数
相关函数会返回null,程序运行报错(http://bbs.csdn.net/topics/120073755)
2.1:Ubuntu下首先要配置下环境(安装python-dev,即python core developer)
sudo apt-get install python-dev 或者 sudo aptitude install python-dev 2.2:编写python文件2.3:编写C程序
1. 设置编译环境,其实就是设置Python的头文件和库文件目录 2. 初始化Python解释器: Py_Initialize();
3. 调用Python文件中的函数 4. 释放资源 Py_Finalize();
2.4:编译C程序
gcc -o emc emc.c -I/usr/include/python2.3 -lpython2.3 -L/usr/lib/python2.2/config 其中:
-I/usr/include/python2.3
-Idir 添加查找头文件的目录 -lpython2.3 添加python2.5库 -L/usr/lib/python2.2/config
-Ldir 制定编译的时候,搜索库的路径。比如你自己的库,可以用它制定目录,不
然编译器将只在标准库的目录找。这个dir就是目录的名称。
注释
Python-dev python-dev on Freenode is for CPython developers, where they can coordinate their work or discuss problems.
Cpython CPython是用C语言实现的Python解释器,也是官方的并且是最广泛使用的Python解释器。
3:C语言中直接调用python脚本函数
去掉2.2,并且将2.3中的第三步直接修改为函数 PyRun_SimpleString()。
4:例子
看一个很简单的例子
1)python文件test.py,很简单的定义了一个函数
1. #Filename test.py 2. def Hello():
3. print "Hello, world!"
这个应该能看懂的吧?否则的话,回去再练练python吧,呵呵。《简明Python教程》Swaroop, C. H. 著。沈洁元 译。
2)cpp文件
1. #include <python.h> //包含头文件,在c++中嵌入python,这是必须的 2. int main() 3. {
4. Py_Initialize(); 5.
6. PyObject * pModule = NULL; 7. PyObject * pFunc = NULL; 8.
9. pModule = PyImport_ImportModule("test");
10. pFunc = PyObject_GetAttrString(pModule, "Hello"); 11. PyEval_CallObject(pFunc, NULL); 12.
13. Py_Finalize(); 14.
15. return 0; 16.}
第一步还是包含头文件
第二步,使用python之前,要调用Py_Initialize();这个函数进行初始化。 帮助文档中如是说:
The basic initialization function is Py_Initialize(). This initializes the table of loaded modules, and creates the fundamental modules __builtin__, __main__, sys, and exceptions. It also initializes the module search path (sys.path). 反正,一开始你一定要调用。
第三步,声明一些Python的变量,PyObject类型的。其实声明也可放在前面,这个倒是无所谓的。
第四步,import module,也就是你的脚本名字,不需要加后缀名,否则会出错的。 第五步,从你import进来的module中得到你要的函数 pFunc = PyObject_GetAttrString(pModule, "Hello");
上面的例子已经够清楚的了,最后一个是你要得到的函数的名字
第六步,调用PyEval_CallObject来执行你的函数,第二个参数为我们要调用的函数的函数,本例子不含参数,所以设置为NULL。
第七步,调用Py_Finalize,这个根Py_Initialize相对应的。一个在最前面,一个在最后面。