c++调用python

摘要:
之前的注释:1。在Python目录中包含和libs2。将python27.dll复制到python27_d.dll3.python的文件名不能为test.py,以避免出现未知错误。本文摘自网络。为了方便起见,源代码不是我的[cpp]viewplaincopy#include<iostream>#include>Python。h˃ 使用namespacestd;使无效

便以前的注意事项:

1.包含Python目录下的include和libs

2.拷贝 python27.dll为python27_d.dll

3.python的文件名字不能为test.py,避免发生未知错误

本文章来自网络收集,为了方便所以源码也不是本人的

[cpp] view plain copy
 
  1. #include <iostream>    
  2. #include <Python.h>    
  3.     
  4. using namespace std;    
  5.     
  6. void HelloWorld();    
  7. void Add();    
  8. void TestTransferDict();    
  9. void TestClass();    
  10.     
  11. int main()    
  12. {    
  13.     cout << "Starting Test..." << endl;    
  14.     
  15.     cout << "HelloWorld()-------------" << endl;    
  16.     HelloWorld();    
  17.     cout << "Add()--------------------" << endl;    
  18.     Add();    
  19.     cout << "TestDict-----------------" << endl;    
  20.     TestTransferDict();    
  21.     cout << "TestClass----------------" << endl;    
  22.     TestClass();    
  23.     
  24.     system("pause");    
  25.     return 0;    
  26. }    
  27.     
  28. //调用输出"Hello World"函数    
  29. void HelloWorld()    
  30. {    
  31.     Py_Initialize();              //使用python之前,要调用Py_Initialize();这个函数进行初始化    
  32.     PyObject * pModule = NULL;    //声明变量    
  33.     PyObject * pFunc = NULL;      //声明变量    
  34.     pModule =PyImport_ImportModule("Test001");              //这里是要调用的Python文件名    
  35.     pFunc= PyObject_GetAttrString(pModule, "HelloWorld");   //这里是要调用的函数名    
  36.     PyEval_CallObject(pFunc, NULL);                         //调用函数,NULL表示参数为空    
  37.     Py_Finalize();                //调用Py_Finalize,这个和Py_Initialize相对应的.    
  38. }    
  39.     
  40. //调用Add函数,传两个int型参数    
  41. void Add()    
  42. {    
  43.     Py_Initialize();    
  44.     
  45.     PyObject * pModule = NULL;        
  46.     PyObject * pFunc = NULL;          
  47.     pModule =PyImport_ImportModule("Test001");      //Test001:Python文件名    
  48.     pFunc= PyObject_GetAttrString(pModule, "add");  //Add:Python文件中的函数名    
  49.   //创建参数:    
  50.     PyObject *pArgs = PyTuple_New(2);               //函数调用的参数传递均是以元组的形式打包的,2表示参数个数    
  51.     PyTuple_SetItem(pArgs, 0, Py_BuildValue("i", 5));//0---序号  i表示创建int型变量    
  52.     PyTuple_SetItem(pArgs, 1, Py_BuildValue("i", 7));//1---序号    
  53.   //返回值    
  54.     PyObject *pReturn = NULL;    
  55.     pReturn = PyEval_CallObject(pFunc, pArgs);      //调用函数    
  56.   //将返回值转换为int类型    
  57.     int result;    
  58.     PyArg_Parse(pReturn, "i", &result);    //i表示转换成int型变量    
  59.     cout << "5+7 = " << result << endl;    
  60.     
  61.     Py_Finalize();                    
  62. }    
  63.     
  64. //参数传递的类型为字典    
  65. void TestTransferDict()    
  66. {    
  67.     Py_Initialize();    
  68.     
  69.     PyObject * pModule = NULL;        
  70.     PyObject * pFunc = NULL;          
  71.     pModule =PyImport_ImportModule("Test001");      //Test001:Python文件名    
  72.     pFunc= PyObject_GetAttrString(pModule, "TestDict"); //Add:Python文件中的函数名    
  73.   //创建参数:    
  74.     PyObject *pArgs = PyTuple_New(1);     
  75.     PyObject *pDict = PyDict_New();   //创建字典类型变量    
  76.     PyDict_SetItemString(pDict, "Name", Py_BuildValue("s", "WangYao")); //往字典类型变量中填充数据    
  77.     PyDict_SetItemString(pDict, "Age", Py_BuildValue("i", 25));         //往字典类型变量中填充数据    
  78.     PyTuple_SetItem(pArgs, 0, pDict);//0---序号  将字典类型变量添加到参数元组中    
  79.   //返回值    
  80.     PyObject *pReturn = NULL;    
  81.     pReturn = PyEval_CallObject(pFunc, pArgs);      //调用函数    
  82.   //处理返回值:    
  83.     int size = PyDict_Size(pReturn);    
  84.     cout << "返回字典的大小为: " << size << endl;    
  85.     PyObject *pNewAge = PyDict_GetItemString(pReturn, "Age");    
  86.     int newAge;    
  87.     PyArg_Parse(pNewAge, "i", &newAge);    
  88.     cout << "True Age: " << newAge << endl;    
  89.         
  90.     Py_Finalize();                    
  91. }    
  92.     
  93. //测试类    
  94. void TestClass()    
  95. {    
  96.     Py_Initialize();    
  97.     
  98.     PyObject * pModule = NULL;        
  99.     PyObject * pFunc = NULL;          
  100.     pModule =PyImport_ImportModule("Test001");      //Test001:Python文件名    
  101.     pFunc= PyObject_GetAttrString(pModule, "TestDict"); //Add:Python文件中的函数名    
  102.   //获取Person类    
  103.     PyObject *pClassPerson = PyObject_GetAttrString(pModule, "Person");    
  104.     //创建Person类的实例    
  105.     PyObject *pInstancePerson = PyInstance_New(pClassPerson, NULL, NULL);    
  106.     //调用方法    
  107.     PyObject_CallMethod(pInstancePerson, "greet", "s", "Hello Kitty");   //s表示传递的是字符串,值为"Hello Kitty"    
  108.     
  109.     Py_Finalize();              
  110. }  



[python] view plain copy
 
    1. def HelloWorld():    
    2.     print "Hello World"    
    3. def add(a, b):    
    4.     return a+b    
    5. def TestDict(dict):    
    6.     print dict    
    7.     dict["Age"] = 17    
    8.     return dict    
    9. class Person:    
    10.     def greet(self, greetStr):    
    11.         print greetStr    
    12. #print add(5,7)    
    13. #a = raw_input("Enter To Continue...")  

http://blog.csdn.net/singleroot/article/details/42105907

免责声明:文章转载自《c++调用python》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux 内核:设备驱动模型 平台设备驱动1.2 ribbon-客户端负载均衡下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

openGL 函数 收集

glViewport()函数 在OpenGL初始化完成之后,我们应该进行一些视图设置。首先是设定视见区域,即告诉OpenGL应把渲染之后的图形绘制在窗体的哪个部位。当视见区域是整个窗体时,OpenGL将把渲染结果绘制到整个窗口。我们调用glViewPort函数来决定视见区域: procedureglViewPort(x:GLInt;y:GLInt;Widt...

Python多线程----线程池以及线程实现异步任务

Python多线程----线程池 需求:假设我们现在有一个多线程项目,每有一个用户连接进来,我们的服务器就会创建一个线程。而我们的服务器最多能够承载100个线程,再多就会崩溃。为了防止恶意用户伪装真实用户构建大量的访问来让我们的服务器崩溃,现在需要对线程数量进行限制,一共只有100个线程,并且当一个用户访问结束以后线程会自动归还,等待下一个用户访问。如果1...

jvm之方法内联优化

前言 在日常中工作中,我们时不时会代码进行一些优化,比如用新的算法,简化计算逻辑,减少计算量等。对于java程序来说,除了开发者本身对代码优化之外,还有一个"人"也在背后默默的优化我们的代码,这个"人"就是jvm。jvm会帮我们分析出热点代码,优化代码逻辑。其中jvm最常做的优化之一就是:方法内联优化。 方法内联 什么是方法内联?又可以叫做函数内联,jav...

python飞机大战源码和素材

python飞机大战素材及代码已上传百度云,链接: https://pan.baidu.com/s/1ptZzCC5Z0tqySrw6p7gHsw 提取码: pqxn plane_main 1 importpygame 2 from plane_sprites import * 3 4 5 classPlaneGame(object): 6 "...

【python】标准库的大致认识

正如那句 Python 社区中很有名的话所说的:“battery included”,Python 的一大好处在于它有一套很有用的标准库(standard library)。标准库是随着 Python 一起安装在你的电脑中的,是 Python 的一部分 (当然也有特殊情况。有些场合会因为系统安全性的要求,不使用全部的标准库,比如说Google App En...

python基础-6 字典相关练习题

写代码:有如下字典按照要求实现每一个功能dict = {"k1":"v1","k2":"v2","k3":"v3"} 1、请循环遍历出所有的key 1 dict = {"k1":"v1","k2":"v2","k3":"v3"} 2 3 #1、请循环遍历出所有的key 4 for k in dict: 5 print(k) View Code...