C/C++与Python互相调用

本文详细介绍了如何实现C/C++调用Python以及Python调用C/C++的两种互调方式。在C/C++中调用Python,可以通过设置路径并利用PySys_SetArgv、PySys_SetPath和PyRun_AnyFile等函数来实现。而在Python中调用C/C++编译的库,可以使用Python API进行扩展,通过编译C/C++代码为动态链接库,然后在Python中导入和使用。
摘要由CSDN通过智能技术生成

一、【C/C++调用Python】

参考:http://www.open-open.com/lib/view/open1329532219656.html

1、例程:

test.c

#include "Python.h"


void HelloWorld(){
     Py_Initialize();
        PyRun_SimpleString("import sys"); 
        PyRun_SimpleString("print 'hi,python!'");
        PyRun_SimpleString("sys.path.append('./')");


     PyObject * pModule = NULL;
     PyObject * pFunc = NULL;
     printf("11111 %x\n",pModule);
     pModule =PyImport_ImportModule("mypy");
        printf("11111 %x\n",pModule);
     pFunc= PyObject_GetAttrString(pModule, "HelloWorld");
     PyEval_CallObject(pFunc, NULL);
     Py_Finalize();
}


void main(){
        printf("tttttt\n");
        HelloWorld();
}

mypy.py

#!/usr/bin/env python
print '2222'
def HelloWorld():
  print 'this is Helloworld'

编译: mips-linux-gnu-gcc -EL test.c -L./lib -lpython2.7 -I./include/python2.7/

2、例程:

test.cpp

#include <iostream>  
#include "Python.h"
   
using namespace std;  
   
void HelloWorld();  
void Add();  
void TestTransferDict();  
void TestClass();  
   
int main()  
{  
     cout << "Starting Test..." << endl;  
   
     cout << "HelloWorld()-------------" << endl;  
     HelloWorld();  
     cout << "Add()--------------------" << endl;  
     Add();  
     cout << "TestDict-----------------" << endl;  
     TestTransferDict();  
     cout << "TestClass----------------" << endl;  
     TestClass();  
   
//     system("pause");  
     return 0;  
}  
   
void HelloWorld()  
{  
     Py_Initialize();
        PyRun_SimpleString("import sys"); 
        PyRun_SimpleString("print 'hi,python!'");
        PyRun_SimpleString("sys.path.append('./')");
     PyObject * pModule = NULL;
     PyObject * pFunc = NULL;
     pModule =PyImport_ImportModule("Test001");
     pFunc= PyObject_GetAttrString(pModule, "HelloWorld");
     PyEval_CallObject(pFunc, NULL);
     Py_Finalize();
}  
   
 
void Add()  
{  
     Py_Initialize();  
        PyRun_SimpleString("import sys"); 
        PyRun_SimpleString("sys.path.append('./')");   
     PyObject * pModule = NULL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒江蓑笠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值