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

Embedded Python in C++ can't execute pygame

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

// 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