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

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 15:53   3320   0

前言

最近经常会遇到这样一个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);

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP