Python调用C++

/***gcc -o libpycall.so -shared -fPIC pycall.c*/
#include <stdio.h>
#include <stdlib.h>
int foo(int a, int b)
{
  printf("you input %d and %d\n", a, b);
  return a+b;
}

Python调用动态库的文件:pycall.py

import ctypes
ll = ctypes.cdll.LoadLibrary
lib = ll("./libpycall.so")
lib.foo(1, 3)
print ‘***finish***‘

Python调用C++(类)动态链接库

需要extern "C"来辅助,也就是说还是只能调用C函数,不能直接调用方法,但是能解析C++方法。不是用extern "C",构建后的动态链接库没有这些函数的符号表。

#include <iostream>
using namespace std;

class TestLib
{
    public:
        void display();
        void display(int a);
};
void TestLib::display() {
    cout<<"First display"<<endl;
}

void TestLib::display(int a) {
    cout<<"Second display:"<<a<<endl;
}
extern "C" {
    TestLib obj;
    void display() {
        obj.display();
      }
    void display_int() {
        obj.display(2);
      }
}

g++编译生成动态库libpycall.so:g++ -o libpycallclass.so -shared -fPIC pycallclass.cpp。
Python调用动态库的文件:pycallclass.py

import ctypes
so = ctypes.cdll.LoadLibrary
lib = so("./libpycallclass.so")
print ‘display()‘
lib.display()
print ‘display(100)‘
lib.display_int(100)

转载:http://blog.csdn.net/taiyang1987912/article/details/44779719

时间: 2024-12-04 20:38:23

Python调用C++的相关文章

python调用脚本或shell的方式

python调用脚本或shell有下面三种方式: os.system()特点:(1)可以调用脚本.(2)可以判断是否正确执行.(3)满足不了标准输出 && 错误 commands模块特点:(1). commands.getstatusoutput(cmd)用os.popen()执行命令cmd, 然后返回两个元素的元组(status, result). cmd执行的方式是{ cmd ; } 2&get;&1, 这样返回结果里面就会包含标准输出和标准错误.(2). comman

Python调用(运行)外部程序

在Python中可以方便地使用os模块运行其他的脚本或者程序,这样就可以在脚本中直接使用其他脚本,或者程序提供的功能,而不必再次编写实现该功能的代码.为了更好地控制运行的进程,可以使用win32process模块中的函数.如果想进一步控制进程,则可以使用ctype模块,直接调用kernel32.dll中的函数. 1 使用os.system函数运行其他程序2 使用ShellExecute函数运行其他程序3 使用CreateProcess函数运行其他程序4 使用ctypes调用kernel32.dl

Python调用SqlPlus查询Oracle

用Python查询Oracle,当然最好用cx_Oracle库,但有时候受到种种限制,不能安装Python第三方库,就得利用现有资源,硬着头皮上了. 用Python调用SqlPlus查询Oracle,首先要知道SqlPlus返回结果是什么样的: (这是空行) Number Name Address ------------ ----------- ------------------ 1001 张三 南京路 1002 李四 上海路 第1行是空行,第2行是字段名称,第3行都是横杠,有空格隔开,第4

python调用系统命令popen、system

python调用Shell脚本,有两种方法:os.system(cmd)或os.popen(cmd),前者返回值是脚本的退出状态码,后者的返回值是脚本执行过程中的输出内容.所以说一般我们认为popen更加强大 os.system(cmd): 该方法在调用完shell脚本后,返回一个16位的二进制 数,低位为杀死所调用脚本的信号号码,高位为脚本的退出状态码,即脚本中“exit 1”的代码执行后,os.system函数返回值的高位数则是1,如果低位数是0的情况下,则函数的返回值是0×100,换算为1

python调用java

这么个标题多少有点蛋疼的感觉,两个都是互联网时代的语言,学习成本和执行效率也差不多,之所以会产生这种需求,多半是想在python中引用java的类,例如安卓和hadoop的生态圈,基本是java代码的天下,虽然python大数据有不错的接口,但直接调用java的需求总是有的.这个目前已经有解决方案,例如jython,采用了java编写的python的解释器,在java虚拟机上面运行了python虚拟机,想想都悲催,两个慢解释型语言的结合jython速度慢来自于基因. 还有一种方案就是使用c做桥接

利用Python调用HBASE

利用Python调用HBASE的 需要安装thrift hbase-thrift 启动hbase的thrift服务:bin/hbase-daemon.sh start thrift 默认端口是9090 mysql 到hbase的数据同步: 1.put 2.Importtsv 3.编写MapReduce Job导入 4.sqoop 简单code: #!/usr/bin/env python #coding=utf-8 import sys sys.path.append('/usr/lib/pyt

Python调用7zip命令实现解压

Python调用7zip命令实现文件批量解压 1.输入压缩文件所在的路径 2.可以在代码中修改解压到的文件路径和所需要解压的类型,列入,解压文件夹下面所有的mp4格式的文件 3.cmd 指的就是Python调用dos命令 ,紧跟着的x -r这些全是参考7zip使用书册,及抽取文件夹下所有的以mp4结尾的文件,把文件放入e盘,测试解压文件夹下的new文件夹 # 调用7z命令批量解压文件 import os folder_name = input("请输入文件夹:") os.chdir(f

python 调用 R,使用rpy2

python 与 R 是当今数据分析的两大主流语言.作为一个统计系的学生,我最早接触的是R,后来才接触的python.python是通用编程语言,科学计算.数据分析是其重要的组成部分,但并非全部:而R则更偏重于统计分析,毕竟R是统计学家发明的,本身就是为统计而生.python的优势在于其全能性,几乎所有的领域都有python的身影,而R则在统计及其相关领域非常专业.二者各有优势.那么这么好的两个东西,能不能结合到一起呢?答案是肯定的.要想实现这种功能,一般必须要提供相应的调用接口.rpy2这个第

Python调用dll

Python的运行效率并不高,不过我们可以通用调用c函数或者dll来提高效率. 下面简单的写一个dll: MyDll.h 1 #ifndef MYDLL 2 #define MYDLL 3 #ifdef MY_DLL 4 #define MY_DLL extern "C" _declspec(dllimport) 5 #else 6 #define MY_DLL extern "C" _declspec(dllexport) 7 #endif 8 9 MY_DLL

python调用系统命令 shell命令

使用python调用系统命令,基本有3种选择: 1. 使用os模块的system方法 import os os.system('ls') 2. 使用os模块的popen方法 import os os.popen('ls') 3. 使用commands模块的getstatusoutput方法 import commands commands.getstatusoutput('ls') 以上3种方式都可以调用系统命令,但其中第三种方式,过程中如果系统命令报错,例如mkdir一个已存在的目录,其不会把