C++调用Python脚本需嵌入Python解释器,核心步骤为初始化、执行、获取变量、清理;须链接Python库、注意路径与异常处理,多线程需GIL管理,轻量场景可选system调用。

在C++中调用Python脚本,核心是使用Python官方提供的C API(即Python.h),通过嵌入Python解释器来执行脚本。关键步骤包括:初始化解释器、加载脚本、运行代码、处理返回值、最后清理资源。下面给出一个简洁、可运行的示例,并说明注意事项。
确保你的编译环境已安装Python开发包(如Ubuntu下装python3-dev,Windows下需Python对应版本的libs和include目录)。编译时要链接Python库,例如:
g++ main.cpp -o main `python3-config --includes --ldflags`
假设你有一个hello.py:
立即学习“Python免费学习笔记(深入)”;
print("Hello from Python!")
result = 42 + 10
对应的C++代码如下:
#include
#include iostream>
int main() {
Py_Initialize(); // 初始化Python解释器
// 执行Python脚本文件
int ret = PyRun_SimpleString("exec(open('hello.py').read())");
if (ret == 0) {
std::cout } else {
std::cout }
Py_Finalize(); // 清理资源
return 0;
}
如果想从C++里读取Python脚本里定义的变量(比如上面的result),需要用Python C API操作全局命名空间:
#include
#include
int main() {
Py_Initialize();
// 执行脚本
PyObject* pModule = PyImport_AddModule("__main__");
PyObject* pDict = PyModule_GetDict(pModule);
PyRun_String("exec(open('hello.py').read())", Py_file_input, pDict, pDict);
// 获取变量 result
PyObject* pResult = PyDict_GetItemString(pDict, "result");
if (pResult && PyLong_Check(pResult)) {
long value = PyLong_AsLong(pResult);
std::cout }
Py_Finalize();
return 0;
}
路径问题:Python脚本路径是相对于C++程序运行时的当前工作目录,不是源码目录。推荐用绝对路径或提前设置PySys_SetArgv和sys.path。
异常处理:PyRun_String出错时不会自动打印异常,可用PyErr_Print()捕获并输出错误信息。
线程安全:多线程调用需调用PyEval_InitThreads()(Python 3.7+ 已默认初始化)、加GIL锁(PyGILState_Ensure() / PyGILState_Release())。
替代方案:若只是偶尔调用脚本且不追求性能,也可用std::system("python3 script.py")启动子进程——更简单,但无法共享变量、无实时交互。
基本上就这些。嵌入Python解释器功能强大,但也带来依赖和生命周期管理负担。小项目用子进程更轻量;需要深度交互时再上C API。
以上就是C++如何调用Python脚本?(代码示例)的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号