gpt4 book ai didi

用 Golang 和 C 编写的 Python 模块

转载 作者:IT王子 更新时间:2023-10-29 01:55:02 24 4
gpt4 key购买 nike

<分区>

我关注这个tutorial

在 C 中编写此代码:

#define Py_LIMITED_API
#include <Python.h>

PyObject * startVM(PyObject *, PyObject *);

int PyArg_ParseTuple_S(PyObject * args, char* a) {
return PyArg_ParseTuple(args, "s", &a);
}

static PyMethodDef FooMethods[] = {
{"startVM", startVM, METH_VARARGS, "Starts."},
{NULL, NULL, 0, NULL}
};

static struct PyModuleDef foomodule = {
PyModuleDef_HEAD_INIT, "foo", NULL, -1, FooMethods
};

PyMODINIT_FUNC PyInit_foo(void) {
return PyModule_Create(&foomodule);
}

GO 中的这段代码:

package main

import "fmt"


// #cgo pkg-config: python3
// #define Py_LIMITED_API
// #include <Python.h>
// int PyArg_ParseTuple_S(PyObject *,char *);
import "C"

//export startVM
func startVM(self, args *C.PyObject) {
var a *C.char
if C.PyArg_ParseTuple_S(args, a) == 0 {
//return nil
}
fmt.Println(a)
//return C.PyBytes_FromString(&a)
}

func main() {}

我可以在 go 中编译代码,但是当我使用以下命令在 python 中调用模块时:python3 -c 'import foo; foo.startVM("hello")',它打印 nil 并导致段错误...有人知道如何解决吗?提前致谢。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com