首页 > 解决方案 > 信号 SIGSEGV:当我使用 go-python3 时,分段违规代码 = 0x1

问题描述

当我尝试执行我的代码两次时出现错误“分段违规”并且我没有更多的想法来解决这个问题......:/

   func (a *MyActivity) Eval(context activity.Context) (done bool, err error) {

    pinString := context.GetInput("input1").(string)
    // string to int
    pinInt, _ := strconv.Atoi(pinString)

    //defer python3.Py_Finalize()
    python3.Py_Finalize()
    python3.Py_Initialize()
    if !python3.Py_IsInitialized() {
        fmt.Println("Error initializing the python interpreter")
        os.Exit(1)
    }

    dir, err := filepath.Abs(filepath.Dir("./"))
    if err != nil {
        //log.Fatal(err)
        fmt.Println(err)
    }

    ret := python3.PyRun_SimpleString("import sys\nsys.path.append(\"" + dir + "\")")
    if ret != 0 {
        //log.Fatalf("error appending '%s' to python sys.path", dir)
        fmt.Println("error appending to python sys.path" + dir)
    }
    // Here is the problem \\
    oImport = python3.PyImport_ImportModule("detect") //ret val: new ref
    if !(oImport != nil && python3.PyErr_Occurred() == nil) {
        python3.PyErr_Print()
        //log.Fatal("failed to import module 'detect'")
        fmt.Println("failed to import module 'detect'")
    }
    // Here is the problem \\
     .
     .
     .
     .
}

我尝试了很多东西,但我无法解决问题,使用库 go-python3 对我来说是新的

非常感谢你的帮助 :)

标签: pythongo

解决方案


在我的函数 Eval 之前,我用 Golang 中的函数 init() 解决了这个问题。我将所有导入以及 python3.Py_Finalize() 和 python3.Py_Initialize() 放入 init() 函数中,它对我有用:)


推荐阅读