繁体   English   中英

Python C API 在py文件中导入库时出现分段错误

[英]Python C API segmentation fault when importing library in py file

我正在尝试从 C 程序运行 python 程序。

但是,当我在 my.py 文件中添加行import signal时,出现分段错误。

使用 GDB 我看到行pModule = PyImport_Import(pName); 返回 NULL 值。

(gdb) print pModule
$1 = (PyObject *) 0x0

当我删除 python 中的线路import signal时,模块正确加载。 你知道如何解决这个问题吗?

这是我的 python 代码:

import signal

def main(person):
    print("DANS PYTHON")
    return "What's up " + person;

这是我的 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;
}

我正在使用 Ubuntu 20.04

在此先感谢您的帮助

我也在 Ubuntu 20.04 上,我也有同样的问题。

从 c 程序运行时,我发现 sys.path 是['.'] 所以它只在当前目录中搜索。

我能够通过在import signal之前添加这 2 行来运行您的脚本

import sys
sys.path.append("/usr/lib/python3.8")

import signal

def main(person):
    print("DANS PYTHON")
    return "What's up " + person

要获取我运行的信号模块的文件夹:

$ python3
Python 3.8.10 (default, Nov 26 2021, 20:14:08) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import signal
>>> signal.__file__
'/usr/lib/python3.8/signal.py'
>>> 

我认为某处缺少配置,但我对此一无所知。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM