如题 我的 c++代码:
#include <Python.h>
#include <iostream>
#include <marshal.h>
using namespace std;
int main(){
PyObject *pName, *pModule, *pFunc;
PyObject *pArgs, *pValue;
//cout<<233<<endl;
Py_Initialize();
FILE *fff = fopen("./a.pyc","br");
pModule = PyMarshal_ReadObjectFromFile(fff);
//Py_DECREF(pModule);
//cout<<PyCode_GetNumFree(pModule);
//PyImport_ExecCodeModule("asd",pModule);
pValue = PyLong_FromLong(123);
cout<<PyCode_Check(pModule);
return 0;
}
只要运行了 PyCode_Check(pModule) 就会导致段错误 进一步测试发现 只要调用 pModule->ob_type 就会导致段错误 同时 a.pyc 文件在 python 中使用 marshal.load 读取 运行 是完全正常的
环境: macos 10.13 测试过 homebrew 的 python 以及 miniconda 的 python 均有这个问题
该如何解决?
1
leoleoasd OP docker 内运行就能解决这个问题
同时还有个坑: 网上都说 pyc 文件前 8 字节是文件头要去掉 但是 python3.7 中是 16 字节 |