美文网首页
C++调用Python函数

C++调用Python函数

作者: 羽墨志 | 来源:发表于2019-10-24 21:32 被阅读0次

准备工作

新建一个控制台应用,写个简单的Hello World程序。

#include <iostream>
#include <Python.h>

using namespace std;

int main(int argc, char *argv[])
{
    cout << "Python function called by Cpp!" << endl;
    return 0;
}

环境配置

C++调用Python脚本需要用到Python安装目录下的includelibs 以及相关的dll,因此需要把相应的路径添加到工程中。 如果libs文件夹下没有python36_d.lib文件,可复制python36.lib并重命名为python36_d.lib备用。

  1. 添加头文件目录以及库文件目录

    在解决方案资源管理器中选中当前项目,右键选择属性:

属性
  1. 在项目属性页中的VC++目录选项里的包含目录、库目录中分别添加Pythonincludelibs的路径
目录
  1. 在链接器选项下的输入中添加附加依赖项python37_d.lib(位于Python安装目录下的libs文件夹中,直接填写文件名即可)。

    附加依赖项

    [注] Debug 版本的附加依赖项填写python37_d.libRelease 版本的附加依赖项填写python37.lib

代码测试

  1. 先写一个Python的测试脚本,用于打印当前日期和时间:

    #!/usr/bin/python
    #coding:utf-8
    
    import time
    
    def run(name):
     print("Hi,"+name+".")
     print("It is "+time.strftime("%Y-%m-%d %X", time.localtime())+".")
       
    def main():
     run("Kevin")
        
    if __name__=='__main__':
     main()
    

    运行脚本得到如下结果

python脚本运行结果
  1. C++调用
    在Hello World程序基础上修改即可:

    #include <iostream>
    #include <Python.h>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
     cout << "Python function called by Cpp!" << endl;
    
     // 初始化Python环境
     Py_Initialize(); 
    
     // 判断初始化是否成功  
     if (!Py_IsInitialized())
     {
         cout << "Initialize failed ..." << endl;
         // 关闭 Python 脚本解释器,释放内存。
         Py_Finalize();  
         return -1;
     }
    
     PyObject *pModule = NULL;
     PyObject *pFunc = NULL;
     PyObject *pArg = NULL;
    
     // 添加模块路径
     PyRun_SimpleString("import sys");
     PyRun_SimpleString("sys.path.append('./')");
     
     // 导入模块
     pModule = PyImport_ImportModule("DemoForCpp");
     if (!pModule) // 检查模块是否导入成功
     {
         cout << "Python file import failed ..." << endl;
         Py_Finalize();
         return -1;
     }
     else
     {
         // 导入函数
         pFunc = PyObject_GetAttrString(pModule, "run"); //python 脚本里的函数名
         if (!pFunc) // 检查函数是否导入成功
         {
             cout << "Function import failed ..." << endl;
             Py_Finalize();
             return -1;
         }
    
            //C++类型转换为python类型
         PyObject *pParams = Py_BuildValue("(s)", "Michael");
    
         char *result;
    
         pArg = PyEval_CallObject(pFunc, pParams); // 调用函数
            //获取结果,python类型转换为C++类型。
         PyArg_Parse(pArg, "s", &result);
         
         cout << result << endl;
     }
    
     Py_Finalize();
    
     return 0;
    }
    
  2. 调用结果

调用结果

最后,祝所有的程序猿(媛)们节日快乐!


1024程序员节

相关文章

  • Python调用C++函数(SWIG,VS2013使用numpy

    最近尝试使用Python调用C++函数,发现网上都是一些简单的例子,涉及到Python Numpy数组与C++数组...

  • PY08-04:Python加载动态库

      Python加载动态库主要用于使用C/C++弥补Python的性能,这个主题解决了Python调用动态库中函数...

  • C++调用Python函数

    准备工作 新建一个控制台应用,写个简单的Hello World程序。 环境配置 C++调用Python脚本需要用到...

  • Python.Boost 学习笔记1

    Python.Boost是让Python能够更直接自由的调用C++函数和类的库。这个库的产生是为了提高Python...

  • Python - 2017/01/28-函数

    调用python内置函数 函数名(参数) 即可调用python内置函数 help(函数名) 返回python对于函...

  • python3函数(一)

    python3中可以调用函数和定义函数。 1、调用函数 直接调用python3自带的函数 (1)函数abs(-10...

  • Python调用C语言函数

    ctype说明 ctypes是Python的一个外部库,可以通过Ctypes调用C/C++语言的函数。 ctype...

  • 「转」C++ 和 JS 交互

    本章主要来讲讲如何通过 V8 来实现 JS 调用 C++。JS 调用 C++,分为 JS 调用 C++ 函数(全局...

  • C++子线程调用Java方法

    1. C++ 全局调用Java方法 之前讨论过,如何C++主线程中调用 Java 函数C++主线程调用Java方法...

  • C++调用python

    C++调用python 在C/C++中嵌入Python,可以使用Python提供的强大功能,通过嵌入Python可...

网友评论

      本文标题:C++调用Python函数

      本文链接:https://www.haomeiwen.com/subject/erxjvctx.html