zoukankan      html  css  js  c++  java
  • C/C++中调用python文件

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

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

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

      //初始化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
    ",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
    ",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
     
     
  • 相关阅读:
    Oracle EBS-SQL (INV-1):库存货位列表.sql
    Oracle EBS-SQL (SYS-24):职责列表
    Oracle EBS-SQL (SYS-23):用户权限查询.sql
    Oracle EBS-SQL (SYS-22):sysadmin_用户职责查询.sql
    Oracle EBS-SQL (SYS-21):sys_用户名与人员对应关系查询.sql
    Oracle EBS-SQL (SYS-20):职责使用菜单2.sql
    Oracle EBS-SQL (SYS-20):OPM接口处理.sql
    Oracle EBS-SQL (SYS-19):sys-用户登陆纪录查询.sql
    Oracle EBS-SQL (SYS-18):检查系统安装的各个表是否打开(PJM%).sql
    Oracle EBS-SQL (SYS-17):查询一张报表在哪个职责下面.sql
  • 原文地址:https://www.cnblogs.com/SZxiaochun/p/5841242.html
Copyright © 2011-2022 走看看