C++ 中的嵌入式 Python 无法执行 pygame

Embedded Python in C++ can't execute pygame

本文关键字:执行 pygame Python 嵌入式 C++      更新时间:2023-10-16

这个想法是从C++应用程序中运行python脚本。从C++端,调用 PyRun_SimpleString(( 方法执行 python 脚本。在python脚本中,首先导入pygame库,并打开一个新窗口。

// g++ -I/usr/include/python3.7m/ -lpython3.7m demo.cpp
#include <Python.h>
int main(int argc, char *argv[])
{
wchar_t progname[FILENAME_MAX + 1];
mbstowcs(progname, argv[0], strlen(argv[0]) + 1);
Py_SetProgramName(progname);
Py_Initialize();
char s[] = "import pygame";
PyRun_SimpleString(s);
Py_Finalize();
return 0;
}

该程序编译得很好,但是在执行C++二进制代码后,会出现以下错误消息。在预期中,argv[0] 参数有问题,Py_SetProgramName(( 被正确执行。

Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib64/python3.7/site-packages/pygame/__init__.py", line 80, in <module>
os.environ['SDL_VIDEO_X11_WMCLASS'] = os.path.basename(sys.argv[0])
IndexError: list index out of range

你必须设置 argc 和 argv

PySys_SetArgv(argc, argv);

https://docs.python.org/3/c-api/init.html#c.PySys_SetArgv