讲述C 中调用Python脚本
创始人
2024-06-22 08:31:25
0

也许大家对与Python脚本还不是很了解,看完本文后对您一定会大有帮助,下文除了学习Python脚本的基本性质外还对调用Python脚本时出现的问题进行全面研究。

需要的时候还可以改一改,只要不改变接口, C++的程序一旦编译好了,再改就没那么方便了 先看Python脚本代码

  1. #test function  
  2.  
  3. def add(a,b):  
  4.  
  5.     print "in python function add"  
  6.  
  7.     print "a = " + str(a)  
  8.  
  9.     print "b = " + str(b)  
  10.  
  11.     print "ret = " + str(a+b)  
  12.  
  13.     return  
  14.  
  15.  
  16.  
  17. def foo(a):  
  18.  
  19.     print "in python function foo"  
  20.  
  21.     print "a = " + str(a)  
  22.  
  23.     print "ret = " + str(a * a)  
  24.  
  25.     return 

把上面的PPython脚本代码存为pytest.py接下来是c++ 的代码:

  1. #include "Python.h"  
  2.  
  3. int main(int argc, char** argv)  
  4. {  
  5.     // 初始化Python  
  6.     //在使用Python系统前,必须使用Py_Initialize对其  
  7.     //进行初始化。它会载入Python的内建模块并添加系统路  
  8.     //径到模块搜索路径中。这个函数没有返回值,检查系统  
  9.     //是否初始化成功需要使用Py_IsInitialized。  
  10.  
  11.     Py_Initialize();  
  12.  
  13.     // 检查初始化是否成功  
  14.     if ( !Py_IsInitialized() )   
  15.     {  
  16.         return -1;  
  17.     }  
  18.  
  19.     // 添加当前路径  
  20.     //把输入的字符串作为Python代码直接运行,返回0  
  21.     //表示成功,-1表示有错。大多时候错误都是因为字符串  
  22.     //中有语法错误。  
  23.     PyRun_SimpleString("import sys");  
  24.     PyRun_SimpleString("sys.path.append('./')");  
  25.     PyObject *pName,*pModule,*pDict,*pFunc,*pArgs;  
  26.  
  27.     // 载入名为pytest的脚本  
  28.     pName = PyString_FromString("pytest");  
  29.     pModule = PyImport_Import(pName);  
  30.     if ( !pModule )  
  31.     {  
  32.         printf("can't find pytest.py");  
  33.         getchar();  
  34.         return -1;  
  35.     }  
  36.     pDict = PyModule_GetDict(pModule);  
  37.     if ( !pDict )   
  38.     {  
  39.         return -1;  
  40.     }  
  41.  
  42.     // 找出函数名为add的函数  
  43.     pFunc = PyDict_GetItemString(pDict, "add");  
  44.     if ( !pFunc || !PyCallable_Check(pFunc) )  
  45.     {  
  46.         printf("can't find function [add]");  
  47.         getchar();  
  48.         return -1;  
  49.     } 

编译选项, 需要手动指定Python脚本的include 路径, 和链接接路径。

【编辑推荐】

  1. 如何使Python嵌入C++应用程序?
  2. 深入探讨Ruby与Python语法比较
  3. Python学习资料介绍分享
  4. Python学习经验谈:版本、IDE选择及编码解 决方案
  5. 浅析Python的GIL和线程安全

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...