C语言中调用python

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 //包含头文件,在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相对应的。一个在最前面,一个在最后面。

你可能感兴趣的:(C,python)