Py_BuildValue 分段错误
Py_BuildValue segmentation fault
我正在尝试 运行 来自 C 程序的简单 python 代码,但我在 pArgs = Py_BuildValue("s",(char*)"Greg");
行遇到分段错误
这是我想要的 python 代码 运行:
def main(person):
return "What's up " + person;
这是我的 C 程序:
#include <stdio.h>
#include <Python.h>
void main(void) {
Py_Initialize();
PyObject *pName, *pModule, *pFunc, *pArgs, *pValue;
pName = PyUnicode_FromString((char*)"main");
pModule = PyImport_Import(pName);
pFunc = PyObject_GetAttrString(pModule, (char*)"main");
pArgs = Py_BuildValue("s",(char*)"Greg");
pValue = PyObject_CallObject(pFunc, pArgs);
Py_Finalize();
return;
}
我正在研究 Ubuntu 20.4
从 Idle 启动的 python 代码有效,文件位于同一目录中 python 文件的名称是 main.py
你能告诉我哪里做错了吗?
pArgs
必须是元组。在格式字符串中添加括号:
pArgs = Py_BuildValue("(s)",(char*)"Greg");
我没有收到分段错误,而是一条明确的错误消息,所以您可能也遇到了构建问题。
TypeError: argument list must be a tuple
正如你告诉我的那样,我替换了 pArgs = Py_BuildValue("s",(char*)"Greg");
来自 pArgs = Py_BuildValue("(s)",(char *)"137912500");
。
正如你告诉我的,我在错误的目录中,所以我添加了 PySys_SetPath(L".");
。
这是我更正的 C 代码:
#include <stdio.h>
#include <Python.h>
void main(void) {
Py_Initialize();
PyObject *pName,*pName2, *pModule, *pFunc, *pArgs, *pValue;
PySys_SetPath(L".");
pName = PyUnicode_FromString((char*)"main");
pModule = PyImport_Import(pName);
pFunc = PyObject_GetAttrString(pModule, (char*)"main");
pArgs = Py_BuildValue("(s)",(char *)"137912500");
pValue = PyObject_CallObject(pFunc, pArgs);
Py_Finalize();
return;
}
再次感谢您的帮助。
我正在尝试 运行 来自 C 程序的简单 python 代码,但我在 pArgs = Py_BuildValue("s",(char*)"Greg");
这是我想要的 python 代码 运行:
def main(person):
return "What's up " + person;
这是我的 C 程序:
#include <stdio.h>
#include <Python.h>
void main(void) {
Py_Initialize();
PyObject *pName, *pModule, *pFunc, *pArgs, *pValue;
pName = PyUnicode_FromString((char*)"main");
pModule = PyImport_Import(pName);
pFunc = PyObject_GetAttrString(pModule, (char*)"main");
pArgs = Py_BuildValue("s",(char*)"Greg");
pValue = PyObject_CallObject(pFunc, pArgs);
Py_Finalize();
return;
}
我正在研究 Ubuntu 20.4
从 Idle 启动的 python 代码有效,文件位于同一目录中 python 文件的名称是 main.py
你能告诉我哪里做错了吗?
pArgs
必须是元组。在格式字符串中添加括号:
pArgs = Py_BuildValue("(s)",(char*)"Greg");
我没有收到分段错误,而是一条明确的错误消息,所以您可能也遇到了构建问题。
TypeError: argument list must be a tuple
正如你告诉我的那样,我替换了 pArgs = Py_BuildValue("s",(char*)"Greg");
来自 pArgs = Py_BuildValue("(s)",(char *)"137912500");
。
正如你告诉我的,我在错误的目录中,所以我添加了 PySys_SetPath(L".");
。
这是我更正的 C 代码:
#include <stdio.h>
#include <Python.h>
void main(void) {
Py_Initialize();
PyObject *pName,*pName2, *pModule, *pFunc, *pArgs, *pValue;
PySys_SetPath(L".");
pName = PyUnicode_FromString((char*)"main");
pModule = PyImport_Import(pName);
pFunc = PyObject_GetAttrString(pModule, (char*)"main");
pArgs = Py_BuildValue("(s)",(char *)"137912500");
pValue = PyObject_CallObject(pFunc, pArgs);
Py_Finalize();
return;
}
再次感谢您的帮助。