我试着替换掉
PyRun_SimpleString("import Pootle");使用
PyObject *obj = PyString_FromString("Pootle");
PyImport_Import(obj);
Py_DECREF(obj);在一些C代码中初始化模块Pootle之后。第一个似乎使名称Pootle可用于后续的PyRun_SimpleString调用,但第二个不能。
有人能给我解释一下其中的区别吗?有没有一种方法可以像第一个方法一样处理C API调用?
谢谢
发布于 2009-05-18 17:11:32
PyImport_Import调用所做的只是返回对模块的引用--它不会使这样的引用对程序的其他部分可用。因此,如果您希望PyRun_SimpleString看到新导入的模块,则需要手动添加它。
PyRun_SimpleString在__main__模块命名空间中自动工作。在不太注意错误检查的情况下(注意NULL返回!),这是一个大致的概述:
PyObject *main = PyImport_AddModule("__main__");
PyObject *obj = PyString_FromString("Pootle");
PyObject *pootle = PyImport_Import(obj);
PyObject_SetAttrString(main, "Pootle", pootle);
Py_DECREF(obj);
Py_XDECREF(pootle);https://stackoverflow.com/questions/878439
复制相似问题