如何在visual studio里面调用python代码

前言

最近经常会遇到这样一个case:在visual studio里面需要将某个二维数组保存成numpy文件或者反过来,需要将某个numpy文件load成mat数组。这里面涉及到在visual sutdio里面如何调用python脚本来实现前面提到的功能。

visual studio配置python环境

包含目录添加python的include路径

 库目录添加python库路径:

 环境变量添加python路径:

python脚本

在visual studio里面调用python脚本里面的函数之前,需要先把python脚本内容准备好,其实就是一系列功能函数的实现,如下图所示是numpy_file.py里面的内容。

import numpy as np
import os

def save_to_right_mapy_file(np_array):
    #print("shape of np_array", np_array.shape)
    np.save('./right/mapy.npy', np_array)
	
def load_numpy_file(np_file):
	return np.load("./disparities_pp.npy")
	#return np.load(np_file)

python初始化代码

主要用来初始化python系统,并加载python代码文件

	/*初始化Python
	在使用Python系统前,必须使用Py_Initialize对其
	进行初始化。它会载入Python的内建模块并添加系统路
	径到模块搜索路径中。这个函数没有返回值,检查系统
	是否初始化成功需要使用Py_IsInitialized。*/
	Py_Initialize();
	import_array();

	// 检查初始化是否成功
	if (!Py_IsInitialized())
	{
		return -1;
	}

	PyRun_SimpleString("import sys");
	PyRun_SimpleString("sys.path.append('./')");

	s_pModule = PyImport_ImportModule("numpy_file");
	if (s_pModule == NULL)
	{
		return -1;
	}
	s_pDict = PyModule_GetDict(s_pModule);
	if (s_pDict == NULL)
	{
		return -1;
	}

python功能函数的调用

前面步骤做好后,就可以在visual studio实现对python脚本里面的函数进行调用。

下面代码演示的是对save_to_right_mapy_file()的调用。

	/*Pass by Python Array: Transform an C Array to Python Array*/
	npy_intp Dims[2] = { matrix.rows, matrix.cols };
	
	
	s_pPyArray = PyArray_SimpleNewFromData(2, Dims, NPY_FLOAT, (float *)matrix.data);


	PyObject *ArgArray = PyTuple_New(1);
	PyTuple_SetItem(ArgArray, 0, s_pPyArray);
	PyObject *pFunc = nullptr;

	
	pFunc = PyDict_GetItemString(s_pDict, "save_to_right_mapy_file");

	if (pFunc == nullptr)
	{
		return -1;
	}
	PyObject_CallObject(pFunc, ArgArray);

	//Release
	Py_DECREF(ArgArray);

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章