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;
}

再次感谢您的帮助。