如何让python调用C和C++代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何让python调用C和C++代码相关的知识,希望对你有一定的参考价值。

二、Python调用C/C++1、Python调用C动态链接库Python调用C库比较简单,不经过任何封装打包成so,再使用python的ctypes调用即可。(1)C语言文件:pycall.c[html]viewplaincopy/***gcc-olibpycall.so-shared-fPICpycall.c*/#include#includeintfoo(inta,intb)printf("youinput%dand%d\n",a,b);returna+b;(2)gcc编译生成动态库libpycall.so:gcc-olibpycall.so-shared-fPICpycall.c。使用g++编译生成C动态库的代码中的函数或者方法时,需要使用extern"C"来进行编译。(3)Python调用动态库的文件:pycall.py[html]viewplaincopyimportctypesll=ctypes.cdll.LoadLibrarylib=ll("./libpycall.so")lib.foo(1,3)print'***finish***'(4)运行结果:2、Python调用C++(类)动态链接库需要extern"C"来辅助,也就是说还是只能调用C函数,不能直接调用方法,但是能解析C++方法。不是用extern"C",构建后的动态链接库没有这些函数的符号表。(1)C++类文件:pycallclass.cpp[html]viewplaincopy#includeusingnamespacestd;classTestLibpublic:voiddisplay();voiddisplay(inta);;voidTestLib::display()cout#include#includeintfac(intn)if(n<2)return(1);/*0!==1!==1*/return(n)*fac(n-1);/*n!==n*(n-1)!*/char*reverse(char*s)registerchart,/*tmp*/*p=s,/*fwd*/*q=(s+(strlen(s)-1));/*bwd*/while(p 参考技术A 出门左转搜索引擎,有个东西叫 ctypes

如何使用 c++ 代码调用和运行一个已存在的 python 文件?

【中文标题】如何使用 c++ 代码调用和运行一个已存在的 python 文件?【英文标题】:How to use c++ code to invoke and run one existed python file? 【发布时间】:2018-05-07 02:41:59 【问题描述】:

我有一个名为 email.py 的完整 python 程序,该程序用于向预设地址发送一封电子邮件。有没有办法可以在 c++ 上下文中调用这个 python 文件?就像一个可以调用和运行 email.py 的 c++ 函数一样?

【问题讨论】:

Calling Python script from C++ and using its output的可能重复 也许停在堆栈溢出的help section (how to ask a question)。对于像您这样的新用户来说,这是一个宝贵的资源。此外,您下次应该尝试自己搜索修复程序。我做了一个简短的谷歌搜索,发现成千上万的结果来解决这个确切的问题。 【参考方案1】:

stdlin.h 库中使用system。这不会捕获输出或有关程序退出状态的任何内容。它只是像在命令行上键入它一样调用它

#include <stdlib.h>

int main() 

  // Command as a string
  char* command = "python email.py";

  // Call it
  system(command);

  return 0;

这是一个非常简单的解决方案。 Boost 等库允许您将 Python 导入 C++。

How to import a function from python file by Boost.Python

【讨论】:

嗨,我试过你的方法,它说“模块'smtplib'没有属性'SMTP'”(mail = smtplib.SMTP是我python文件中的代码),所以我认为我的 email.py 文件错误,我应该把 email.py 文件放在哪里? 这是 Python 代码的问题。您的代码可能正在导入 python 模块smtplib。可能是您的计算机运行的 python 版本比该模块所需的更新或旧版本,并且模块中的某些内容已被移动。我在 http 库中遇到过类似的问题。但是,我不知道如何解决这个问题。这与运行 Python 程序的 C++ 程序无关。 python程序直接从命令行运行是否调用成功?

以上是关于如何让python调用C和C++代码的主要内容,如果未能解决你的问题,请参考以下文章

如何让python调用C和C++代码

如何让 Python 代码与 C++ App 一起工作?

C++和C代码互相调用是不可避免的

如何从 C 代码正确创建 DLL 并在 C++ 项目中使用它

C++ DLL 返回从 Python 调用的指针

Python绑定;调用 C 代码和性能