在 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 并导致分段错误......有人知道如何修复它吗?提前致谢。
哈士奇WWW
相关分类