Linux C调用Python 函数
1.Python脚本,名称为py_add.py
def add(a=1,b=1):print('Function of python called!')print('a = ',a)print('b = ',b)print('a + b = ',a+b)
2.C代码
#include <stdio.h>
#include <stdlib.h>
#include <Python.h>int main(int argc,char **argv)
{//初始化,在使用python系统前,必须使用Py_Initialize对其进行初始化。它会载入Python的内建模块并添加系统路径到模块搜索路径中。Py_Initialize();//判断初始化是否成功if(!Py_IsInitialized()){printf("Python init failed!\n");return -1;}//PyRun_SimpleString 为宏,执行一段python代码//导入当前路径PyRun_SimpleString("import sys");PyRun_SimpleString("sys.path.append('./')");PyObject *pName = NULL;PyObject *pModule = NULL;PyObject *pDict = NULL;PyObject *pFunc = NULL;PyObject *pArgs = NULL;//加载名为py_add的python脚本pName = PyString_FromString("py_add");pModule = PyImport_Import(pName);if(!pModule){printf("Load py_add.py failed!\n");getchar();return -1;}pDict = PyModule_GetDict(pModule);if(!pDict){printf("Can't find dict in py_add!\n");return -1;}//找到函数名为add的函数 pFunc = PyDict_GetItemString(pDict,"add");if(!pFunc || !PyCallable_Check(pFunc)){printf("Can't find function!\n");getchar();return -1;}/*向Python传参数是以元组(tuple)的方式传过去的,因此我们实际上就是构造一个合适的Python元组就可以了,要用到PyTuple_New,Py_BuildValue,PyTuple_SetItem等几个函数*/pArgs = PyTuple_New(2);// PyObject* Py_BuildValue(char *format, ...) // 把C++的变量转换成一个Python对象。当需要从 // C++传递变量到Python时,就会使用这个函数。此函数 // 有点类似C的printf,但格式不同。常用的格式有 // s 表示字符串, // i 表示整型变量, 如Py_BuildValue("ii",123,456)// f 表示浮点数, // O 表示一个Python对象PyTuple_SetItem(pArgs,0,Py_BuildValue("i",123));PyTuple_SetItem(pArgs,1,Py_BuildValue("i",321));//调用python的add函数PyObject_CallObject(pFunc,pArgs);//清理python对象if(pName){Py_DECREF(pName);}if(pArgs){Py_DECREF(pArgs);}if(pModule){Py_DECREF(pModule);}//关闭python调用Py_Finalize();return 0;}
3.编译
gcc -I/usr/include/python2.7/ mian.c -o main -L/usr/lib/ -lpython2.7
备注:链接Python的库需要在最后,否则可能出现以下错误提示:
undefined reference to ‘Py_Initialize’
参考博客:https://blog.csdn.net/magictong/article/details/8947892
Linux C调用Python 函数相关推荐
- c调用python函数_python - Linux C调用Python 函数
1.Python脚本,名称为py_add.py def add(a=,b=): print('Function of python called!') print('a = ',a) print('b ...
- C++回调函数中调用Python函数出现的死锁问题调试及解决
一.查找死锁原因: 1.使用gdb exe指令进入gdb命令行,再输入r运行可执行文件 gdb /home/sdhm/catkin_ws/devel/lib/gpd_ros/gpd_server GN ...
- C++调用Python函数
From: http://www.flatws.cn/article/program/c/2010-08-24/9677.html Python代码在实现某些功能的时候非常方便,如果能够将Python ...
- VS2017 QT/C++ 调用python函数传图像
原文:VS2019 C++ 调用python函数/类对象的方法_ 蜗牛在听雨的博客-CSDN博客_c++调用python函数 1.c++调用python类(传图像参数) ,编译出错,解决方法: 因为需 ...
- python中execute函数_在excel中调用python函数
效果: 通过excel引用在py文件中写好的load_settle()函数,可以快捷的获取对应的历史结算价. 使用方法: 1.首先安装office,我用的是2016版本. 2.安装python,推荐使 ...
- C++和Python混合编程:C++调用Python函数
文章目录 一.C++直接运行python代码的控制台Demo 二.环境配置 三.C++调用Python函数 C++传入Python的参数格式转换 C++调用Python[有参有返回值]函数 C++运行 ...
- Excel单元格使用xlwings包调用python函数的公式,截取子网页(标题)的试验 问题求助CSDN
Excel单元格使用xlwings包调用python函数的公式,截取子网页(标题)的试验 问题求助CSDN Python 环境:python3.7 的conda上的py3环境 Excel 2010 E ...
- html怎么调用python,使用HTML调用python函数
我在python中有一个显示名称列表的函数.使用HTML调用python函数 def search(): with open('business_ten.json') as f: data=f.rea ...
- 实践在C++中调用Python函数
目标 目标是在C++中调用Python函数,给定输入,得到输出. 主要参考: 如何实现 C/C++ 与 Python 的通信? - 知乎 C++调用Python脚本中的函数 - Achimesir - ...
最新文章
- 实话实说:中文自然语言处理的N个真实情况
- 华为云工业智能体,做智能化最“硬核”
- lan交换和无线教师手册_无线AP组网方式有多种,办公楼的无线覆盖系统的组网方式有哪些?...
- Android 系统(36)---Android O、N版本修改dex2oat编译选项
- java设计模式—工厂模式
- 刚刚,2021 ACM Fellow放榜!李飞飞、谢涛、刘铁岩等13名华人学者当选
- pandas 第八章 文本数据
- 《算法导论》第16章-贪心算法 16.1-活动选择问题(含C++代码)
- 笔记--利用python下载bilibili视频
- webpack工具知多少(上篇)
- 搞IT的you知道这些么……
- 工程师小哥魔术揭秘“三仙归洞”,把我都看蒙了!
- 谷歌AdMob广告接入(插屏广告)
- 状态空间离散化matlab,现代控制理论:3.4g 线性连续系统状态空间模型的离散化...
- 利用Python对文件夹下的TXT文件批量改名、改内容操作
- piwik java版_Piwik Mobile 2 - Web Analytics
- 解决github无法访问的办法
- PCB入门学习—原理图的绘制2
- “Error 1923 occurs when you try to update Adobe Acrobat DC or Acrobat Reader DC” 的解决办法
- 三星手机安装linux系统,android – 在Linux上安装带有MTP的三星Galaxy Tab 2 7.0
热门文章
- 把计算机中数据刻录到光盘上称为,XP系统下如何将数据刻录到光盘中?XP系统将数据刻录到光盘的方法...
- 【指标体系构建】标准化处理+熵权法
- 跨平台API对接(Python)的使用
- IDEA去掉屏幕中间的白色竖线
- 32908字长文理解Large Vision Model:Segment Anything
- 树莓派移动文件权限获取
- 【2】激活函数与Loss函数求导
- 计算机话题作文,雅思话题作文范文:电脑与现代教育
- 笔记二:Maven+SSM之JSON简介
- mysql 从第几位开始截取_Mysql字符串截取函数SUBSTRING的用法说明