Python 與 C 擴充 -透過 C++ 執行檔的各種處理
環境
windows 11 64bit
Visual Studio 2022
python 3.12.2 64bit
Visual Studio 2022 環境設置
首先做好基本準備
main.cpp
#include <iostream>
#include <Python.h>
using namespace std;
int main()
{
//PythonTest01(); //單純執行
//PythonTest02(); //C++ 呼叫 python 函式
//PythonTest03(); //執行 python 檔
system("pause");
return 0;
}
1. 單純執行 python
void PythonTest01() //單純執行
{
Py_Initialize();
PyRun_SimpleString("print('Hello World, Python')\n");
Py_Finalize();
}
執行結果
2. C++ 呼叫 python 函式
void PythonTest02() //C++ 呼叫 python 函式
{
Py_Initialize();
printf("%d", great_function_from_python(2));
Py_Finalize();
}
int great_function_from_python(int a)
{
int res;
PyObject* pModule, * pFunc;
PyObject* pArgs, * pValue;
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./')");
/* import */
pModule = PyImport_Import(PyUnicode_FromString("great_module"));
/* great_module.great_function */
pFunc = PyObject_GetAttrString(pModule, "great_function");
/* build args */
pArgs = PyTuple_New(1);
PyTuple_SetItem(pArgs, 0, PyLong_FromLong(a));
/* call */
pValue = PyObject_CallObject(pFunc, pArgs);
res = PyLong_AsLong(pValue);
return res;
}
great_module.py
def great_function(x):
return x+100
執行結果
3. 執行 python 檔案
void PythonTest03() //執行 python 檔
{
Py_Initialize();
PyObject* pModule, * pFunc;
PyObject* pArgs, * pValue;
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./')");
/* import */
pModule = PyImport_Import(PyUnicode_FromString("testa"));
/* great_module.great_function */
pFunc = PyObject_GetAttrString(pModule, "TestA");
/* build args */
pArgs = PyTuple_New(0);
/* call */
pValue = PyObject_CallObject(pFunc, pArgs);
Py_Finalize();
}
testa.py
print("Hello")
def TestA():
print("Hello TestA")
執行結果