我有用C编写的Python扩展模块。我想在这个C代码中使用标准Python模块之一,例如os
或shutil
。怎么做到最好?
答案 0 :(得分:8)
PyObject* os = PyImport_ImportModuleNoBlock("os");
if (os == NULL)
return NULL;
someattr = PyObject_GetAttrString(os, "someattr");
Py_DECREF(os);
如果您只导入一次模块,例如,在init_yourmodule()
函数中,请使用PyImport_ImportModule("os")
。
答案 1 :(得分:2)
唐'吨
相反,更改扩展模块以便它为Python提供服务,然后编写调用os
,shutil
和模块的Python代码。
事实上,对于os
模块中的大量内容,编写本机C代码而不是调用Python可能更好。
当然,you can call Python modules from C code,对于os
和shutil
这样的低级别模块来说,这样做太过分了。当谈到shutil
中的文件复制方法时,在C代码中重新实现它们是微不足道的。事实上,在Windows上,复制文件是通过调用操作系统完成的,所以即使用C语言编写也没有太多代码。
如果Python模块是用C语言编写的,你甚至可以复制所需方法的代码。