c 运行python脚本语言 C语言中程序如何调用Python脚本
C语言中程序如何调用Python脚本
更新时间:2021年05月13日 10:34:09 作者:Em0s_Erit
由于python有很多功能强大的开源库c 运行python脚本语言,有时候在写C语言程序的时候又想利用一下python强大的模块,那么C语言中程序如何调用Python脚本,感兴趣的小伙伴们可以参考一下
目录
有时候在写C语言程序的时候又想利用一下python强大的模块,于是C与python的混合编程便应运而生。
下面简单说说在C语言编译环境中调用python脚本文件的基础应用。
一、环境配置
以vs2017为例。
0x00 平台
首先你要知道你电脑上安装的python环境是64位还是32位c 运行python脚本语言,vs的编译平台需要与python环境一致。
比如我的python环境是64位,vs工程就要配置成x64。
右键点击你的解决方案,点击属性,
0x01 添加 包含目录 和 库目录
在属性窗口双击“VC++ Directories”(VC++目录),把在Include Directories (包含目录)和 Library Directories(库目录)下添加python安装路径下的include和ibs文件夹的路径。
0x02 添加依赖项
在添加之前一定要先确保自己安装了python的debug版本辅助卡盟,详见我的另一篇博客【VS2017】“LNK1104 cannot open file ‘python39_d.lib‘
双击“linker”(链接器)下的“Input”,添加python39_d.lib这个依赖项
点击确定则配置完成。
这样在写程序的时候添加Python.h头文件就不会报错,python39_d.lib里的API函数也就可以正常使用了。
二、案例
主要流程就是:
#include#include int main() { PyObject *pName, *pModule, *pDict, *pFunc; PyObject *pArgs, *pValue; //待传参数 int time[6]={1,2,3,4,5,6}; //初始化python Py_Initialize(); // 检查初始化是否成功 if (!Py_IsInitialized()) { printf("初始化失败\n"); Py_Finalize(); } //设置python模块,搜寻位置,文件放在.c文件一起 PyRun_SimpleString("import sys"); PyRun_SimpleString("sys.path.append('./')"); //获取python文件名,导入模块(我这里的py文件是graph.py) pModule = PyImport_ImportModule("graph"); if (!pModule) { printf("py文件导入失败\n"); Py_Finalize(); } else { //直接获取模块中的函数 pFunc = PyObject_GetAttrString(pModule, "create_graph"); //验证函数是否获取成功 if (!pFunc) { printf("函数导入失败\n"); Py_Finalize(); } //将c/c++类型数据转换为python类型,利用元组传递 pArgs = PyTuple_New(6); pValue = PyLong_FromLong(time[0]); PyTuple_SetItem(pArgs, 0, pValue); pValue = PyLong_FromLong(time[1]); PyTuple_SetItem(pArgs, 1, pValue); pValue = PyLong_FromLong(time[2]); PyTuple_SetItem(pArgs, 2, pValue); pValue = PyLong_FromLong(time[3]); PyTuple_SetItem(pArgs, 3, pValue); pValue = PyLong_FromLong(time[4]); PyTuple_SetItem(pArgs, 4, pValue); pValue = PyLong_FromLong(time[5]); PyTuple_SetItem(pArgs, 5, pValue); //调用直接获得的函数,并传递参数 pValue = PyObject_CallObject(pFunc, pArgs); //释放python Py_Finalize(); printf("success"); return 0; } }