1.将python27安装目录下include、libs文件夹拷贝至Demo程序目录。

2.Demo项目设置包含Python.h、python27.lib);

  (因为安装python27的时候,python27.dll已经放到C:\Windows\System32下,所以不用拷贝至执行程序目录下。)

  //初始化python

  Py_Initialize();

  //定义python类型的变量

  PyObject  *pModule = NULL;

  PyObject  *pFunc = NULL;

  PyObject  *pArg = NULL;

  PyObject  *result =  NULL;

  PyObject  *pClass = NULL;

  PyObject  *pInstance = NULL;

  PyObject  *pDict = NULL;

  //直接运行python代码

  PyRun_SimpleString("print 'python start'");

  //引入模块(Demo.py)

  pModule = PyImport_ImportModule("Demo");

  1.

  //直接获取模块中的函数

  pFunc = PyObject_GetAttrString(pModule,"hello");

  //Demo.py中hello函数参数是一个元组。传递一个字符串,要先将c/c++类型的字符串转换成元组。

  pArg = Py_BuildValue("(s)","hello xiaochun");

  //调用获得的hello函数,并传递参数

  PyEval_CallObject(pFunc,pArg);

  2.

  //获取模块字典属性

  pDict = PyModule_GetDict(pModule);

  //从字典属性中获取函数

  pFunc = PyDict_GetItemString(pDict,"arg");

  //arg函数参数是两个整型数值组成的元组。

  pArg = Py_BuildValue("(i,i)",1,2);

  //调用arg函数,并得到PyObject类型的返回值

  result = PyEval_CallObject(pFunc,pArg);

  //将PyObject类型的返回值result转换成c/c++类型

  int c;

  PyArg_Parse(result,"i",&c);

  printf("a+b=%d\n",c);

  //通过字典属性获取模块中的类

  pClass = PyDict_GetItemString(pDict,"Test");

  //实例化获取的类

  pInstance = PyInstance_New(pClass,NULL,NULL);

  //调用类的方法

  result = PyObject_CallMethod(pInstance,"say_hello","(s)","xiaochun");

  //输出返回值

  char * name = NULL;

  PyArg_Parse(result,"s",&name);

  printf("%s\n",name);

  

  PyRun_SimpleString("print 'python end'");

  getchar();

  return 0;

Demo.py

  def hello(s):

    print "hello world"
    print s
 
def arg(a, b):
    print 'a=', a
    print 'b=', b
    return a + b
 
class Test:
    def __init__(self):
        print "init"
    def say_hello(self, name):
        print "hello,", name
        return name
 
 

C/C++中调用python文件的更多相关文章

  1. C#中调用python方法

    最近因为项目设计,有部分使用Python脚本,因此代码中需要调用python方法. 1.首先,在c#中调用python必须安装IronPython,在 http://ironpython.codepl ...

  2. 如何在Java中调用Python代码

    有时候,我们会碰到这样的问题:与A同学合作写代码,A同学只会写Python,而不会Java, 而你只会写Java并不擅长Python,并且发现难以用Java来重写对方的代码,这时,就不得不想方设法“调 ...

  3. 在Java中调用Python

    写在前面 在微服务架构大行其道的今天,对于将程序进行嵌套调用的做法其实并不可取,甚至显得有些愚蠢.当然,之所以要面对这个问题,或许是因为一些历史原因,或者仅仅是为了简单.恰好我在项目中就遇到了这个问题 ...

  4. C#调用python文件执行

    我的电脑环境是使用.net framework4.5.1,如果在调试过程中调不通请注意 我用的是Visual studion 2017,python组件下载地址:http://ironpython.c ...

  5. 在Java中调用Python代码

    极少数时候,我们会碰到类似这样的问题:与A同学合作写代码, A同学只会写Python,不熟悉Java ,而你只会写Java不擅长Python,并且发现难以用Java来重写对方的代码,这时,就不得不想方 ...

  6. Windows平台下如何在C#中调用Python

    最近迷上了Python,发现它能够做很多C#无法完成的事情,比如,调用CMD或者在CMD中执行一个exe文件命令行并获得输出的结果.过程简单,处理起来也非常方便,但如果要用C#调用Python文件呢, ...

  7. 在QT C++中调用 Python并将软件打包发布(裸机可运行)

    为了提高工作效率,需要一个可以自动生成多份相关联的word文档免去繁琐复制粘贴工作的软件.最后选定使用QT C++做界面和主要逻辑程序设计,对word的操作使用python写好对应的函数,然后在QT中 ...

  8. C++中调用Python脚本

    C++中调用Python脚本的意义就不讲了,至少你可以把它当成文本形式的动态链接库, 需要的时候还可以改一改,只要不改变接口, C++的程序一旦编译好了,再改就没那么方便了 先看Python的代码 代 ...

  9. CUDA常见问题之无法在c文件中调用cu文件中定义的函数

    当在C源文件中调用cu文件中定义的函数时,会出现undefined reference的问题,而在C++源文件中调用cu文件中定义的函数时则不会出现这个问题. 出现上述问题的原因是,nvcc编译器采用 ...

随机推荐

  1. jquery 表单清空

    $(':input','#myform') .not(':button, :submit, :reset, :hidden') .val('') .removeAttr('checked') .rem ...

  2. ASP.NET、C#调用外部可执行exe文件--多种方案

    一. try { //方法一 //调用自己的exe传递参数 //Process proc = new Process(); //proc.StartInfo.FileName = @"D:\ ...

  3. 淘宝(阿里百川)手机客户端开发日记第一篇 android 主框架搭建(一)

    android 主框架搭建(一) 1.开发环境:Android Studio 相继点击下一步,直接项目建立完毕(如下图) 图片看的效果如果很小,请放大您的浏览器显示百分比  转载请注明http://w ...

  4. Svn + tomcat + Hudson持续集成部署

    1.首先下载hudson 2. 我这里使用hudson-3.0.1版本 3. 下载后hudson是一个 war 包 4. 操作部署: (1). 直接将hudson的war包复制到tomcat的weba ...

  5. iOS开发——UI基础-自定义构造方法,layoutSubviews,Xib文件,利用Xib自定义View

    一.自定义构造方法 有时候需要快速创建对象,可以自定义构造方法 + (instancetype)shopView { return [[self alloc] init]; } - (instance ...

  6. 第一款支持容器和云部署的开源数据库Neo4j 3.0

    导读 Neo4j 3.0.0 正式发布,这是 Neo4j 3.0 系列的第一个版本.此版本对内部架构进行了全新的设计:提供给开发者更强大的生产力:提供更广阔的部署选择.Neo4j 3.0 被认为是世界 ...

  7. [BZOJ1503][NOI2004]郁闷的出纳员

    [BZOJ1503][NOI2004]郁闷的出纳员 试题描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是 ...

  8. SSH-Struts第二弹:一个Form提交两个Action

    根据CSDN中的博客:http://blog.csdn.net/forwayfarer/article/details/3030259进行学习. 1.多个submit的Form表单页面 or 在jsp ...

  9. OpenCV进阶之路:一个简化的视频摘要程序

    一.前言 视频摘要又称视频浓缩,是对视频内容的一个简单概括,先通过运动目标分析,提取运动目标,然后对各个目标的运动轨迹进行分析,将不同的目标拼接到一个共同的背景场景中,并将它们以某种方式进行组合.视频 ...

  10. PHP中interface与 implements 关键字

    类中接口的应用 1.关键字:interface 2.关键字:implements 1.接口的介绍与创建 接口:一种成员属性全部为抽象或常量的特殊抽象类. 规则: 1.类中全部为抽象方法. 2.抽象方法 ...