c 运行python脚本语言 C语言中程序如何调用Python脚本

11/27 23:21:16 来源网站:seo优化-辅助卡盟平台

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;
	}
}

    暂无相关资讯
c 运行python脚本语言 C语言中程序如何调用Python脚本