如何在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);

 

 

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