//在C++里面使用Python "D:\python"Debug需要debug版本的python311_d.lib
#include <Python.h>
//#pragma comment(lib, "python311.lib") //D:\\python\\libs\\python311.lib
int main()
{
Py_Initialize(); // 初始化
//执行一个简单的执行python脚本命令的函数
//int PyRun_SimpleString(const char*)
PyRun_SimpleString("import numpy as np");
PyRun_SimpleString("import pandas as pd");
PyRun_SimpleString("import io, sys, math");
PyRun_SimpleString("print('Hello Python!')");
//*
//从fp中把python脚本的内容读取到内容中并执行,filename应该为fp对应的文件名
char szFile[] = "E:\\Learning\\TESPY\\tespy_test2.py";
FILE* fp = nullptr;
fopen_s(&fp, szFile, "r");
if (fp && PyRun_SimpleFile(fp, szFile) != 0)
{
Py_Finalize(); //释放资源
fclose(fp);
printf("PyRun_SimpleFile(%s) failed!", szFile);
return -1;
}
//int PyRun_SimpleFile(FILE * fp, const char* filename)
//*/
PyObject* pMod = NULL;
PyObject* pFun = NULL;
PyObject* pParm = NULL;
PyObject* pRetVal = NULL;
int iRetval = 0;
float ftRet = 0.0f;
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append( './' )");
PyRun_SimpleString("print(sys.path)");
if (pMod = PyImport_ImportModuleNoBlock("test_add")) //E:\\Learning\\test_add.py //PyImport_ImportModule
{
if (pFun = PyObject_GetAttrString(pMod, "AddF"))//函数
{
pParm = PyTuple_New(2);
PyTuple_SetItem(pParm, 0, Py_BuildValue("f", 321.3));
PyTuple_SetItem(pParm, 1, Py_BuildValue("f", 500.5));
pRetVal = PyObject_CallObject(pFun, pParm); //PyEval_CallObject //PyObject_CallOneArg
PyArg_Parse(pRetVal, "f", &ftRet);
printf("AddF result: %.1f\n", ftRet);
}
else
{
printf("Not found fun!\n");
}
if (pFun = PyObject_GetAttrString(pMod, "Add"))//函数
{
pParm = PyTuple_New(3);
PyTuple_SetItem(pParm, 0, Py_BuildValue("i", 300));
PyTuple_SetItem(pParm, 1, Py_BuildValue("i", 500));
PyTuple_SetItem(pParm, 2, Py_BuildValue("i", 20));
pRetVal = PyObject_CallObject(pFun, pParm); //PyEval_CallObject //PyObject_CallOneArg
PyArg_Parse(pRetVal, "i", &iRetval);
printf("Add result: %d\n", iRetval);
}
else
{
printf("Not found fun!\n");
}
}
else
{
printf("Not found module!\n");
}
try
{
PyRun_SimpleString("print(sys.path)");
}
catch (...)
{
printf("Error to import!");
}
Py_Finalize(); //释放资源
std::cout << "Hello World!\n";
system("pause");
return 0;
}